带有图像数据的Java Volley请求多部分表单

带有图像数据的Java Volley请求多部分表单,java,android-studio,android-volley,multipartform-data,Java,Android Studio,Android Volley,Multipartform Data,我正在尝试使用RESTAPI将数据上传到我的web应用程序。我需要发送一个带有其他参数的图像作为多部分数据。根据我在这里看到的一些帖子,我有下面的方法。当请求被提交时,它会失败,从服务器日志来看,它似乎没有读取参数,并且使用ID失败 我对如何使用截击来构造请求感到困惑。如果我发送的等效使用失眠如下所示,那么它是成功的。我已经使用相同的承载令牌进行了复制 private void uploadPicture(){ progressDialog=新建progressDialog(CameraAct

我正在尝试使用RESTAPI将数据上传到我的web应用程序。我需要发送一个带有其他参数的图像作为多部分数据。根据我在这里看到的一些帖子,我有下面的方法。当请求被提交时,它会失败,从服务器日志来看,它似乎没有读取参数,并且使用ID失败

我对如何使用截击来构造请求感到困惑。如果我发送的等效使用失眠如下所示,那么它是成功的。我已经使用相同的承载令牌进行了复制

private void uploadPicture(){
progressDialog=新建progressDialog(CameraActivity.this);
progressDialog.setMessage(“正在上载,请稍候…”);
progressDialog.show();
Log.d(“URL”,URL+PICN);
//将图像转换为base64字符串
ByteArrayOutputStream bas=新的ByteArrayOutputStream();
位图compressedImg=getResizedBitmap(imageBitmap,600);
compressedImg.compress(Bitmap.CompressFormat.PNG,100,baos);
byte[]imageBytes=bas.toByteArray();
最终字符串imageString=Base64.encodeToString(imageBytes,Base64.DEFAULT);
Log.d(“令牌”,令牌);
//将图像发送到服务器
JsonObjectRequest=newJSONObjectRequest(request.Method.POST,URL+PICNS,null,new Response.Listener()){
@凌驾
公共void onResponse(JSONObject响应){
progressDialog.disclose();
Log.d(“RESPONSE”,RESPONSE.toString());
}
},new Response.ErrorListener(){
@凌驾
公共错误响应(截击错误截击错误){
Log.d(“Error”,volleyError.toString());
Toast.makeText(CameraActivity.this,“发生了一些错误->”+截击错误,Toast.LENGTH_LONG).show();;
}
}) {
//添加要发送的参数
@凌驾
受保护的映射getParams()引发AuthFailureError{
映射参数=新的HashMap();
参数put(“路线id”,“1”);
参数。put(“lat”,“52.395728”);
参数。put(“lng”、“-1.992031”);
参数。put(“description”,”);
参数放置(“标题”,“哇上传了这个”);
参数.put(“图片”,图像字符串);
返回参数;
}
@凌驾
公共映射getHeaders()引发AuthFailureError{
Map headers=newhashmap();
头.put(“授权”、“持有人”+令牌);
返回标题;
}
};
RequestQueue rQueue=Volley.newRequestQueue(CameraActivity.this);
rQueue.add(请求);
}
我使用来自的库发送多部分请求,它似乎对我有效

private void uploadPicture() {
    progressDialog = new ProgressDialog(CameraActivity.this);
    progressDialog.setMessage("Uploading, please wait...");
    progressDialog.show();

    Log.d("URL", URL + PICNS);

    //converting image to base64 string
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    Bitmap compressedImg = getResizedBitmap(imageBitmap,600);
    compressedImg.compress(Bitmap.CompressFormat.PNG, 100, baos);
    byte[] imageBytes = baos.toByteArray();
    final String imageString = Base64.encodeToString(imageBytes, Base64.DEFAULT);

    Log.d("TOKEN", token);

    //sending image to server
    JsonObjectRequest request = new JsonObjectRequest(Request.Method.POST,URL + PICNS,null, new Response.Listener<JSONObject>(){
        @Override
        public void onResponse(JSONObject response) {
            progressDialog.dismiss();
            Log.d("RESPONSE", response.toString());
        }

    },new Response.ErrorListener(){
        @Override
        public void onErrorResponse(VolleyError volleyError) {
            Log.d("Error", volleyError.toString());
            Toast.makeText(CameraActivity.this, "Some error occurred -> "+volleyError, Toast.LENGTH_LONG).show();;
        }
    }) {
        //adding parameters to send
        @Override
        protected Map<String, String> getParams() throws AuthFailureError {
            Map<String, String> parameters = new HashMap<String, String>();
            parameters.put("route_id","1");
            parameters.put("lat","52.395728");
            parameters.put("lng","-1.992031");
            parameters.put("description", " ");
            parameters.put("caption", "Wow Uploaded This");
            parameters.put("picture", imageString);
            return parameters;
        }

        @Override
        public Map<String, String> getHeaders() throws AuthFailureError {
            Map<String, String> headers = new HashMap<>();
            headers.put("Authorization", "Bearer " + token);
            return headers;
        }


    };

    RequestQueue rQueue = Volley.newRequestQueue(CameraActivity.this);
    rQueue.add(request);
}