时间:2021-05-20
几个月前写过一篇博客《xUtils3.0框架学习笔记》 ,上面也有记录通过xUtils实现文件上传的使用方法,代码如下:
private void upLoadOnClick(View v) { String upUrl = "/mnt/sdcard/pic/test.jpg";//指定要上传的文件 final ProgressDialog dia = new ProgressDialog(this); dia.setMessage("加载中...."); dia.show(); RequestParams params = new RequestParams(upUrl); params.addBodyParameter("file", new File(upUrl)); x.http().post(params, new Callback.CommonCallback<String>() { @Override public void onSuccess(String result) { //加载成功回调,返回获取到的数据 Log.i(TAG, "onSuccess: " + result); } @Override public void onFinished() { dia.dismiss();//加载完成 } @Override public void onCancelled(CancelledException cex) { } @Override public void onError(Throwable ex, boolean isOnCallback) { } }); }我在项目中通过以上方法进行图片上传,发现有点小问题,或许是我把这个方法使 用不到位。
在与服务器联调时,同事总是告诉我没有收到文件流数据,结果肯定是上传失败。后来继续看代码跟进,发现通过
` params.addBodyParameter("file", new File(upUrl));`
这种方式传递文件数据,默认的请求数据类型并不是文件类型所需要的multipart/form-data类型数据。
通过看相应源码,我们在使用xUtils实现网络请求时,通过
`RequestParams params = new RequestParams(Constants.ADD_ZONE_PLANE);`创建请求,然后通过
` params.setRequestBody(body);`传递请求参数。
其实setRequestBody(RequestBody requestBody)方法是调用RequestParams的父类BaseParams中的方法:
考虑是参数数据类型问题,我们就从传递参数RequestBody入手,发现在xUtils中,默认有:
FileBody,InputStreamBody,MultipartBody及StringBody等几种类型的请求Body,当然这些都是RequestBody的子类 。
发现MultipartBody类型中,有这个方法:
看到返回的类型是multipart/form-data...,正是我想要的,所以请求参数就从MultipartBody入手考虑上传文件。
MultipartBody类的构造方法如下:
从构造方法需要的参数开始,我们一步一步地实现MultipartBody所需要的数据。
这样就可以实现文件上传,最后贴下整个请求方法的相关代码:
关于Android上传功能的更多内容请点击专题:Android上传操作汇总进行学习。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
过去在Android上网络通信都是使用的Xutils因为用它可以顺道处理了图片和网络这两个方面,后来发觉Xutils里面使用的是HttpClient而Googl
本实例实现每隔5秒上传一次,通过服务器端获取手机上传过来的文件信息并做相应处理;采用Android+Struts2技术。一、Android端实现文件上传1)、新
Android版本更新实例详解1、导入xutils的jar包2、在AndroidManifest.xml中添加权限3、选择下载的路径,和下载apk文件的网址pr
Android解决WebView无法上传文件的问题Android原生的WebView并不支持上传文件,需要我们自己实现相应的方法。于是我把工作中的相关代码记录下
本文实例讲述了Android基于Http协议实现文件上传功能的方法。分享给大家供大家参考,具体如下:注意一般使用Http协议上传的文件都比较小,一般是小于2M这