Volley上传图片

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
 */
@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() ;
    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();
}

@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();
}

}

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();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值