Volley上传图片

来源:互联网 发布:des算法实验报告 编辑:程序博客网 时间:2024/05/29 18:22

Volley以流的形式上传图片,参考了某大神代码

public class PostUploadRequest extends Request {

public static final String TAG = PostUploadRequest.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<FormImage> mListItem ;public PostUploadRequest(int method, String url,List<FormImage> 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 PostUploadRequest(int method, String url,FormImage formImage,  Response.Listener<JSONObject> listener, Response.ErrorListener errorListener) {    super(method, url, errorListener);    ArrayList<FormImage> formImages = new ArrayList<FormImage>();    formImages.add(formImage);    this.mListener = listener ;    setShouldCache(false);    mListItem = formImages ;    setRetryPolicy(new DefaultRetryPolicy(5000,DefaultRetryPolicy.DEFAULT_MAX_RETRIES,DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));}/** * 这里开始解析数据 * @param response Response from the network * @return */@Overrideprotected 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));    }}@Overrideprotected void deliverResponse(JSONObject response) {    mListener.onResponse(response);}@Overridepublic byte[] getBody() throws AuthFailureError {    if (mListItem == null||mListItem.size() == 0){        return super.getBody() ;    }    ByteArrayOutputStream bos = new ByteArrayOutputStream() ;    int N = mListItem.size() ;    FormImage formImage ;    for (int i = 0; i < N ;i++){        formImage = mListItem.get(i) ;        StringBuffer sb = new StringBuffer();        sb.append(PREFIX);        sb.append(BOUNDARY);        sb.append(LINE_END); //    相关参数需与后台一致       //     sb.append("Content-Disposition: form-image; name=\"file\"; filename=\"" + formImage.getFileName() + "\"" + LINE_END);        sb.append("Content-Disposition: form-data; name=\"file\"; filename=\"" + formImage.getFileName() + "\"" + LINE_END);        sb.append("Content-Type: application/octet-stream; charset=" + CHARSET + LINE_END);        sb.append(LINE_END);        try {            bos.write(sb.toString().getBytes(CHARSET));            bos.write(formImage.getValue());        } 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();}@Overridepublic String getBodyContentType() {    return CONTENT_TYPE + ";boundary=" + BOUNDARY;}private HashMap<String,String> map;public void setHeader(HashMap<String,String> map){    this.map = map;}@Overridepublic Map<String, String> getHeaders() throws AuthFailureError {    if(null != map){        return map;    }    return super.getHeaders();}

}

public class FormImage {

private String fileName ;private Bitmap bitmap ;public void setFileName(String fileName){    this.fileName = fileName;}public String getFileName() {    return fileName;}public void setBitmap(Bitmap bitmap ){    this.bitmap = bitmap;}public Bitmap getBitmap() {    return bitmap;}public byte[] getValue() {    ByteArrayOutputStream bos = new ByteArrayOutputStream() ;    bitmap.compress(Bitmap.CompressFormat.JPEG,80,bos) ;    return bos.toByteArray();}
0 0
原创粉丝点击