我正在使用截击请求向服务器发送一个带有两个参数的请求,并且工作正常。现在,要求已更改,我需要将至少一个图像或最多3个图像以及其他两个参数发送到服务器。图像必须作为多部分发送。我有以下代码用于从图库中获取图像并将其文件路径存储在列表中。
List<String> imagePathList = imageFilePaths;
List<MultipartBody.Part> partMap = new ArrayList<>();
for (int i = 0; i < imagePathList.size(); i++) {
Uri fileUri = Uri.parse(imagePathList.get(i));
RequestBody requestFile = RequestBody.create(
MediaType.parse(getMimeTypee(FileUtils.getFile(getContext(), fileUri).getAbsolutePath())),
FileUtils.getFile(getContext(), fileUri)
);
MultipartBody.Part body = MultipartBody.Part.createFormData("court_image[" + i + "]", FileUtils.getFile(getContext(), fileUri).getName(), requestFile);
partMap.add(body);
}
其中imageFilePaths是一个数组列表。服务器将接收图像,例如court_image [0],court_image [1]等,这取决于我在arraylist中有多少个图像路径。
齐射要求在这里:
RequestQueue queue = Volley.newRequestQueue(getContext());
StringRequest postRequest = new StringRequest(Request.Method.POST, url1,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Toast.makeText(mBaseAppCompatActivity, "Success", Toast.LENGTH_SHORT).show();
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
}
) {
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String, String> params = new HashMap<String, String>();
String token = getToken();
params.put("Authorization", "Bearer " + token);
params.put("Content-Type", "multipart/form-data");
return params;
}
@Override
protected Map<String, String> getParams() {
Map<String, String> params = new HashMap<String, String>();
params.put("terms", "true");
params.put("phone", "phoneNo");
return params;
}
};
queue.add(postRequest);
现在这是我对多部分内容的新手,借助它,我能够从图库中获取图像并将其路径存储在ArrayList中,但是我不知道如何在其中传递多部分数据排球要求。请帮助
答案 0 :(得分:0)
尽管这是一个古老的问题,但我认为我应该在此处发布答案,因为我遇到了同样的问题,并且可以设法解决该问题。
为了上载图像以及其他一些参数,我使用了齐射。但是,我发现了原始齐射库的包装器,该包装器更易于集成到多部分请求中。因此,我在build.gradle
文件中添加了以下库。
dependencies {
compile 'dev.dworks.libs:volleyplus:+'
}
我从build.gradle
中删除了原始的凌空库,并改用了上述库,该库可以处理具有类似集成技术的多部分请求和常规请求。
然后,我只需要编写以下类来处理POST请求操作。
public class POSTMediasTask {
public void uploadMedia(final Context context, String filePath) {
String url = getUrlForPOSTMedia(); // This is a dummy function which returns the POST url for you
SimpleMultiPartRequest multiPartRequestWithParams = new SimpleMultiPartRequest(Request.Method.POST, url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.d("Response", response);
// TODO: Do something on success
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// TODO: Handle your error here
}
});
// Add the file here
multiPartRequestWithParams.addFile("file", filePath);
// Add the params here
multiPartRequestWithParams.addStringParam("terms", "SomeTerms");
multiPartRequestWithParams.addStringParam("phone", "85050055055");
RequestQueue queue = Volley.newRequestQueue(context);
queue.add(multiPartRequestWithParams);
}
}
现在执行如下任务。
new POSTMediasTask().uploadMedia(context, mediaPath);
您可以使用此库一次上传一个文件。但是,我可以通过启动多个任务来设法上传多个文件。
希望有帮助!