android volley 上传图片 和参数,Android使用Volley上传文件

I might be wrong on this but I think you need to implement your own com.android.volley.toolbox.HttpStack for this because the default ones (HurlStack if version > Gingerbread or HttpClientStack) don't deal with multipart/form-data.

Edit:

And indeed I was wrong. I was able to do it using MultipartEntity in Request like this:

public class MultipartRequest extends Request {

private MultipartEntity entity = new MultipartEntity();

private static final String FILE_PART_NAME = "file";

private static final String STRING_PART_NAME = "text";

private final Response.Listener mListener;

private final File mFilePart;

private final String mStringPart;

public MultipartRequest(String url, Response.ErrorListener errorListener, Response.Listener listener, File file, String stringPart)

{

super(Method.POST, url, errorListener);

mListener = listener;

mFilePart = file;

mStringPart = stringPart;

buildMultipartEntity();

}

private void buildMultipartEntity()

{

entity.addPart(FILE_PART_NAME, new FileBody(mFilePart));

try

{

entity.addPart(STRING_PART_NAME, new StringBody(mStringPart));

}

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 parseNetworkResponse(NetworkResponse response)

{

return Response.success("Uploaded", getCacheEntry());

}

@Override

protected void deliverResponse(String response)

{

mListener.onResponse(response);

}

}

It's pretty raw but I tried it with an image and a simple string and it works. The response is a placeholder, doesn't make much sense to return a Response String in this case. I had problems using apache httpmime to use MultipartEntity so I used this https://code.google.com/p/httpclientandroidlib/ don't know if there's a better way.

Hope it helps.

Edit

You can use httpmime without using httpclientandroidlib, the only dependency is httpcore.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值