-1
我通過將圖像轉換爲字節數組,將圖像上傳到PHP。之後,我只需使用POST方法提交它。從Android上傳圖像到PHP的高效方式
在服務器端,我做了與我在客戶端(Android應用程序)端做的相反的事情。
我想知道是否有其他的好/高效/聰明的方法來做到這一點。
注意:我只需要在客戶端只使用PHP/JS/HTML和Java。
我通過將圖像轉換爲字節數組,將圖像上傳到PHP。之後,我只需使用POST方法提交它。從Android上傳圖像到PHP的高效方式
在服務器端,我做了與我在客戶端(Android應用程序)端做的相反的事情。
我想知道是否有其他的好/高效/聰明的方法來做到這一點。
注意:我只需要在客戶端只使用PHP/JS/HTML和Java。
其中一個最有效的方法是做什麼用排球,所以一定要確保它包括在你的gradle產出:
compile 'com.android.volley:volley:1.0.0'
我個人使用,當你包括排球這是自動包含Universal Image Loader。既然你沒有提供任何你試過的代碼,我會給你一些例子。在您嘗試上傳圖片的活動中,創建一個按鈕。點擊該按鈕時添加此代碼:
Intent i = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
i.setType("image/*");
startActivityForResult(i, Constants.VALUE_BROWSE_IMAGE_REQUEST);
這將打開手機中的圖庫瀏覽圖像。在您的活動的頂部聲明一個變量:
private Bitmap mBitmap;
後,你選擇你想從您的畫廊上傳圖片,寫這樣的代碼:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == Constants.VALUE_BROWSE_IMAGE_REQUEST &&
resultCode == RESULT_OK &&
data != null) {
try {
// Get the photo URI data
Uri filePath = data.getData();
// Get the Bitmap from Gallery
mBitmap = decodeBitmap(filePath, this);
} catch (IOException e) {
Toast.makeText(this, "Could not open picture.", Toast.LENGTH_SHORT).show();
}
}
}
現在,你有選擇的位圖圖像,你需要的是位圖轉換爲base64,字符串,以便可以凌空能夠上傳:
// Before uploading the selected image to the server, we need to convert the Bitmap to String.
// This method will convert Bitmap to base64 String.
private String getStringImage(Bitmap bmp) {
ByteArrayOutputStream b = new ByteArrayOutputStream();
// This part handles the image compression. Keep the image quality
// at 70-90 so you don't cause lag when loading it on android
// (0-low quality but fast load, 100-best (original) quality but slow load)
bmp.compress(Bitmap.CompressFormat.JPEG, 80, b);
byte[] imageBytes = b.toByteArray();
String encodedImage = Base64.encodeToString(imageBytes, Base64.DEFAULT);
return encodedImage;
}
最後,你可以開始上傳圖片:
private void uploadImage() {
StringRequest stringRequest = new StringRequest(
Request.Method.POST,
"URL_TO_YOUR_WEB_API",
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(getApplicationContext(), "Failed to upload image.", Toast.LENGTH_SHORT).show();
}
}) {
@Override
protected Map<String, String> getParams() throws AuthFailureError {
// Converting Bitmap to String
String image = getStringImage(mBitmap);
// Create parameters
Map<String, String> params = new Hashtable<>();
// Add parameters
params.put("action", "YOUR_BACKEND_KEY1");
params.put("...", image);
// Returning parameters
return params;
}
};
// Creating a Request Queue
RequestQueue requestQueue = Volley.newRequestQueue(this);
// Adding request to the queue
requestQueue.add(stringRequest);
}
請確保將參數字符串替換爲您已在php中創建後端。
實例網址:
http://yoursite.com/api.php?action=uploadimage&imagebase=adwtgiuewohnjsoiu&caption=somecaptiontext
然後在Android上的參數是:
params.put("action", "uploadimage");
params.put("imagebase", image);
params.put("caption", "somecaptiontext");
請接受這個職位的答案,如果它幫助你... – busuu