gpt4 book ai didi

android - 如何使用 Volley 在服务器上上传图像?

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:01:54 24 4
gpt4 key购买 nike

我正在尝试使用 Volley 发布我的数据,但我无法在服务器上上传我的图片。对于 http:\\www.mybaseurl.com/upload.php,总是出现意外响应代码 500 之类的错误。以下是我尝试上传的代码

 public String getStringImage(Bitmap bmp){
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.JPEG, 100, baos);
byte[] imageBytes = baos.toByteArray();
String encodedImage = Base64.encodeToString(imageBytes, Base64.DEFAULT);
return encodedImage;
}

private void uploadImage(){
//Showing the progress dialog
final ProgressDialog loading = ProgressDialog.show(this,"Uploading...","Please wait...",false,false);
StringRequest stringRequest = new StringRequest(Request.Method.POST, UPLOAD_URL,
new Response.Listener<String>() {
@Override
public void onResponse(String s) {
//Disimissing the progress dialog
loading.dismiss();
//Showing toast message of the response
Toast.makeText(MainActivity.this, s , Toast.LENGTH_LONG).show();
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
//Dismissing the progress dialog
loading.dismiss();

//Showing toast
Toast.makeText(MainActivity.this, ""+volleyError, Toast.LENGTH_LONG).show();
}
}){
@Override
protected Map<String, String> getParams() throws AuthFailureError {
//Converting Bitmap to String
String image = getStringImage(bitmap);
//Getting Image Name
String name = editTextName.getText().toString().trim();
//Creating parameters
Map<String,String> params = new Hashtable<String, String>()
params.put("empsno", "81");
params.put("storesno", "165");
params.put("lrSno", "1808");
params.put("recQty", "0");
params.put("recVol", "0");
params.put("recWgt", "0");
params.put("damageQty", "0");
params.put("looseQty", "0");
params.put("deliveryDate", "2016-09-24");
params.put("deliveryTime", "10:15");
params.put("uploadFile", image);
params.put("remarks", "mytestingrem");
params.put("receivedBy", "amankumar");
params.put("ipAddress", "12.65.65.32");

//returning parameters
return params;
}
};

//Creating a Request Queue
RequestQueue requestQueue = Volley.newRequestQueue(this);

//Adding request to the queue
requestQueue.add(stringRequest);
}

private void showFileChooser() {
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE_REQUEST);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);

if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data != null && data.getData() != null) {
Uri filePath = data.getData();
try {
//Getting the Bitmap from Gallery
bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), filePath);
//Setting the Bitmap to ImageView
imageView.setImageBitmap(bitmap);
} catch (IOException e) {
e.printStackTrace();
}
}
}

@Override
public void onClick(View v) {

if(v == buttonChoose){
showFileChooser();
}

if(v == buttonUpload){
uploadImage();
}
}

请帮助我,如何使用这些参数上传文件。我是 Volley 新手。我只是从 https://www.simplifiedcoding.net/android-volley-tutorial-to-upload-image-to-server 复制粘贴这段代码。即使我不知道我是否正确使用。提前致谢

最佳答案

你可以试试这个方法,它实际上对我的项目有效。首先你必须从图库中选择图像然后它必须转换为字符串并通过 volley 发送到服务器

// initialize
private int PICK_IMAGE_REQUEST = 1;

//set click listener
Upload.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//method to upload the image
showFileChooser();

}
});

打开图库和选择图像的方法

                 private void showFileChooser() {
Intent pickImageIntent = new Intent(Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
pickImageIntent.setType("image/*");
pickImageIntent.putExtra("aspectX", 1);
pickImageIntent.putExtra("aspectY", 1);
pickImageIntent.putExtra("scale", true);
pickImageIntent.putExtra("outputFormat",
Bitmap.CompressFormat.JPEG.toString());
startActivityForResult(pickImageIntent, PICK_IMAGE_REQUEST);
}

添加这个方法。这里的图片实际上是被发送到服务器。

  @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data != null && data.getData() != null) {
Uri filePath = data.getData();
try {
Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), filePath);
Bitmap lastBitmap = null;
lastBitmap = bitmap;
//encoding image to string
String image = getStringImage(lastBitmap);
Log.d("image",image);
//passing the image to volley
SendImage(image);

} catch (IOException e) {
e.printStackTrace();
}
}
}




将图像编码为字符串的方法

 public String getStringImage(Bitmap bmp) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.JPEG, 100, baos);
byte[] imageBytes = baos.toByteArray();
String encodedImage = Base64.encodeToString(imageBytes, Base64.DEFAULT);
return encodedImage;

}






使用 volley 上传

 private void SendImage( final String image) {
final StringRequest stringRequest = new StringRequest(Request.Method.POST, "URL",
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.d("uploade",response);
try {
JSONObject jsonObject = new JSONObject(response);

}
} catch (JSONException e) {
e.printStackTrace();
}

}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(Edit_Profile.this, "No internet connection", Toast.LENGTH_LONG).show();

}
}) {
@Override
protected Map<String, String> getParams() throws AuthFailureError {

Map<String, String> params = new Hashtable<String, String>();

params.put("image", image);
return params;
}
};
{
int socketTimeout = 30000;
RetryPolicy policy = new DefaultRetryPolicy(socketTimeout, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT);
stringRequest.setRetryPolicy(policy);
RequestQueue requestQueue = Volley.newRequestQueue(this);
requestQueue.add(stringRequest);
}
}

关于android - 如何使用 Volley 在服务器上上传图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39703655/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com