Volley上传文件
来源:互联网 发布:mac os x 开机启动项 编辑:程序博客网 时间:2024/05/04 17:48
Volley上传文件:
public class UploadFileRequest extends Request<JSONObject> { public static final String TAG = UploadFileRequest.class.getSimpleName(); private static final String CHARSET = "utf-8"; //设置编码 String BOUNDARY = UUID.randomUUID().toString(); //边界标识 随机生成 String PREFIX = "--", LINE_END = "\r\n"; String CONTENT_TYPE = "multipart/form-data"; //内容类型 /** * 正确数据的时候回掉用 */ private Response.Listener<JSONObject> mListener; /*请求 数据通过参数的形式传入*/ private List<File> mListItem; public UploadFileRequest(int method, String url, List<File> listItem, Response.Listener<JSONObject> listener, Response.ErrorListener errorListener) { super(method, url, errorListener); this.mListener = listener; setShouldCache(false); mListItem = listItem; setRetryPolicy(new DefaultRetryPolicy(5000, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); } public UploadFileRequest(int method, String url, File file, Response.Listener<JSONObject> listener, Response.ErrorListener errorListener) { super(method, url, errorListener); ArrayList<File> files = new ArrayList<File>(); files.add(file); this.mListener = listener; setShouldCache(false); mListItem = files; setRetryPolicy(new DefaultRetryPolicy(5000, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); } /** * 这里开始解析数据 * * @param response Response from the network * @return */ @Override protected Response<JSONObject> parseNetworkResponse(NetworkResponse response) { try { String jsonString = new String(response.data, HttpHeaderParser.parseCharset(response.headers, CHARSET)); return Response.success(new JSONObject(jsonString), HttpHeaderParser.parseCacheHeaders(response)); } catch (UnsupportedEncodingException e) { return Response.error(new ParseError(e)); } catch (JSONException je) { return Response.error(new ParseError(je)); } } @Override protected void deliverResponse(JSONObject response) { mListener.onResponse(response); } @Override public byte[] getBody() throws AuthFailureError { if (mListItem == null || mListItem.size() == 0) { return super.getBody(); } ByteArrayOutputStream bos = new ByteArrayOutputStream(); int N = mListItem.size(); File file; for (int i = 0; i < N; i++) { file = mListItem.get(i); StringBuffer sb = new StringBuffer(); sb.append(PREFIX); sb.append(BOUNDARY); sb.append(LINE_END); /** * name里面的值为服务器端需要key 只有这个key 才可以得到对应的文件 * filename是文件的名字,包含后缀名的 比如:abc.png */ sb.append( "Content-Disposition: form-data; name=\"file\"; filename=\"" + file.getName() + "\"" + LINE_END); sb.append("Content-Type: application/octet-stream; charset=" + CHARSET + LINE_END); sb.append(LINE_END); try { bos.write(sb.toString().getBytes(CHARSET)); InputStream is = new FileInputStream(file); byte[] bytes = new byte[1024]; int len = 0; while ((len = is.read(bytes)) != -1) { bos.write(bytes, 0, len); } is.close(); } catch (IOException e) { e.printStackTrace(); } } try { bos.write(LINE_END.getBytes(CHARSET)); byte[] end_data = (PREFIX + BOUNDARY + PREFIX + LINE_END).getBytes(CHARSET); bos.write(end_data); bos.flush(); } catch (IOException e) { e.printStackTrace(); } return bos.toByteArray(); } @Override public String getBodyContentType() { return CONTENT_TYPE + ";boundary=" + BOUNDARY; } private HashMap<String, String> map; public void setHeader(HashMap<String, String> map) { this.map = map; } @Override public Map<String, String> getHeaders() throws AuthFailureError { if (null != map) { return map; } return super.getHeaders(); }}
0 0
- Volley上传文件
- volley文件上传
- Volley上传文件
- Volley框架(四):使用Volley上传文件
- 基于Volley的文件上传
- Android使用Volley上传文件
- android Volley 上传文件上传图片
- android Volley 上传文件上传图片
- 分享一个volley支持 multipart上传文件
- 分享一个volley支持 multipart上传文件
- SpringMVC+Volley实现Android端上传文件
- Android Volley文件上传(一)
- Android Volley文件上传(二)
- Android Volley文件上传(一)
- Android Volley文件上传(二)
- Volley 网络框架实现文件上传
- Volley框架上传文件TimeoutError问题
- [volley文件上传]Android中自定义MultipartEntity实现文件上传以及使用Volley库实现文件上传
- 《leetCode》:Word Search
- 用lambda作为函数的指针
- Java基础概要(一)
- Android数据持久化功能之一:文件存储
- 1047. Student List for Course (25)
- Volley上传文件
- crash reporting
- google material design ( 1 )
- 转载Python学习笔记
- toolbar的使用
- make
- duplicate symbols for architecture x86_64
- OpenCV Mat 结构
- 技巧