上传一张或多张图片(使用volley框架)

主要是继承volley的Request类,然后通过使用httpmim的MultipartEntity类对文件参数进行封装,可以上传一个文件或多张文件

public class MultipartRequestUpload extends Request<String> {

    private MultipartEntity entity = new MultipartEntity();
    private VolleyInterface listener;
    private List<File> mFileParts;
    private String mFilePartName;
    private Map<String, String> mParams;
    /**
      * 单个文件上传
      *
      *
      * @param  url 地址
      * @param  filePartName 文件夹名称
      * @param  file 文件
      * @param  params 参数
      * @param  listener 监听
      *
     */
    public MultipartRequestUpload(String url, String filePartName, File file,
            Map<String, String> params,VolleyInterface listener) {
        super(Method.POST, url, listener.errorListener());

        mFileParts = new ArrayList<File>();
        if (file != null) {
            mFileParts.add(file);
        }
        this.mFilePartName = filePartName;
        this.listener = listener;
        this.mParams = params;
        buildMultipartEntity();
    }
    /**
      * 多个文件,对应一个key
      *
      * @param  url 地址
      * @param  filePartName 文件夹名称
      * @param  file 文件
      * @param  params 参数
      * @param  listener 监听
      *
      */
    public MultipartRequestUpload(String url, String filePartName, List<File> files,
            Map<String, String> params,VolleyInterface listener) {
        super(Method.POST, url, listener.errorListener());
        this.mFilePartName = filePartName;
        this.listener = listener;
        this.mFileParts = files;
        this.mParams = params;
        System.out.println(filePartName+"-"+files+"-"+params);
        buildMultipartEntity();
    }
    private void buildMultipartEntity() {
        if (mFileParts != null && mFileParts.size() > 0) {
            for (File file : mFileParts) {
                entity.addPart(mFilePartName, new FileBody(file));
            }
        }

        try {
            if (mParams != null && mParams.size() > 0) {
                for (Map.Entry<String, String> entry : mParams.entrySet()) {
                    entity.addPart(entry.getKey(),new StringBody(entry.getValue(), Charset.forName("UTF-8")));
                }
            }
        } catch (UnsupportedEncodingException e) {
            VolleyLog.e("UnsupportedEncodingException");
        }
    }

    @Override
    public String getBodyContentType() {
        return entity.getContentType().getValue();
    }

    @Override
    public byte[] getBody() throws AuthFailureError {
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        try {
            entity.writeTo(bos);
        } catch (IOException e) {
            VolleyLog.e("IOException writing to ByteArrayOutputStream");
        }
        return bos.toByteArray();
    }

    @Override
    protected Response<String> parseNetworkResponse(NetworkResponse response) {
        if (VolleyLog.DEBUG) {
            if (response.headers != null) {
                for (Map.Entry<String, String> entry : response.headers.entrySet()) {
                    VolleyLog.d(entry.getKey() + "=" + entry.getValue());
                }
            }
        }

        String parsed;
        try {
            parsed = new String(response.data,HttpHeaderParser.parseCharset(response.headers));
        } catch (UnsupportedEncodingException e) {
            parsed = new String(response.data);
        }
        return Response.success(parsed,HttpHeaderParser.parseCacheHeaders(response));
    }

    @Override
    public Map<String, String> getHeaders() throws AuthFailureError {
        VolleyLog.d("getHeaders");
        Map<String, String> headers = super.getHeaders();

        if (headers == null || headers.equals(Collections.emptyMap())) {
            headers = new HashMap<String, String>();
        }

        return headers;
    }

    @Override
    protected void deliverResponse(String response) {
        this.listener.loadingListener().onResponse(response);
    }

然后调用这个方法,即可

public static void uploadMultipart(Context context, String url,String fileName,
            List<File> listFile, Map<String, String> params,
            VolleyInterface listener) {
        MultipartRequestUpload request = new MultipartRequestUpload(url,fileName, listFile, params, listener);
        BaseApplication.getHttpQueue().add(request);
        BaseApplication.getHttpQueue().start();
    }

参考:http://my.oschina.net/u/1177694/blog/491834?fromerr=b4AFKFNm

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值