multipart data using Android(安卓)Volley
16lz
2021-12-04
I am using Volley for calling web request for my app. But as i am Volley for first time. I just want to know that how to upload image/video media data via volley using multipart.
I searched for it many sites, I got some results over
How to send a “multipart/form-data” POST in Android with Volley
But, these methods does’nt look good or efficients. So, Please help me that how to upload media data using volley. Or i should not use Volley, and should go for the previous manual approach
Anyway, all thoughts and answers are extremely appreciated. Thank you for your help.
原文链接
解决方案:
import java.io.ByteArrayOutputStream;import java.io.File;import java.io.IOException;import java.util.Map;import org.apache.http.HttpEntity;import org.apache.http.entity.mime.HttpMultipartMode; import org.apache.http.entity.mime.MultipartEntityBuilder; import org.apache.http.entity.mime.content.FileBody; import com.android.volley.AuthFailureError;import com.android.volley.NetworkResponse;import com.android.volley.Request;import com.android.volley.Response;import com.android.volley.VolleyLog;public class MultipartRequest extends Request<String> {// private MultipartEntity entity = new MultipartEntity(); MultipartEntityBuilder entity = MultipartEntityBuilder.create();HttpEntity httpentity;private static final String FILE_PART_NAME = "file";private final Response.Listener<String> mListener;private final File mFilePart;private final Map<String, String> mStringPart;public MultipartRequest(String url, Response.ErrorListener errorListener, Response.Listener<String> listener, File file, Map<String, String> mStringPart) { super(Method.POST, url, errorListener); mListener = listener; mFilePart = file; this.mStringPart = mStringPart; entity.setMode(HttpMultipartMode.BROWSER_COMPATIBLE); buildMultipartEntity(); } public void addStringBody(String param, String value) { mStringPart.put(param, value);} private void buildMultipartEntity() { entity.addPart(FILE_PART_NAME, new FileBody(mFilePart)); for (Map.Entry<String, String> entry : mStringPart.entrySet()) { entity.addTextBody(entry.getKey(), entry.getValue()); } } @Override public String getBodyContentType() { return httpentity.getContentType().getValue();} @Override public byte[] getBody() throws AuthFailureError { ByteArrayOutputStream bos = new ByteArrayOutputStream(); try { httpentity = entity.build(); httpentity.writeTo(bos); } catch (IOException e) { VolleyLog.e("IOException writing to ByteArrayOutputStream"); } return bos.toByteArray();} @Override protected Response<String> parseNetworkResponse(NetworkResponse response) { return Response.success("Uploaded", getCacheEntry());} @Override protected void deliverResponse(String response) { mListener.onResponse(response);} }
注意需要在http://hc.apache.org/downloads.cgi 下载httpcomponents-client-*
解压之后,导入以下三个jar包
httpmime, httpcore and httpclient
更多相关文章
- Android(安卓)Studio 导入Eclipse建立的android项目问题
- windows上 android 21.1版本ADT环境搭建
- 在Eclipse中导入整个Android系统代码
- android edittext 去边框
- Android(一)开发环境的搭建
- Jetpack学习(二)——databinding(2)
- android EditText+ListView的组合(类似于AutoCompleteTextView)
- Android(安卓)复习笔记之图解Activity的4种加载模式
- 导入android studio 项目错误:Error:(1, 0) Plugin with id 'com.