安卓使用OKhttp上传图片并带参数到服务器
安卓端上传图片和参数需要请求网络,OKhttp替代了最早的写法,使用起来很方便,这篇博客主要就是OKhttp的部分和服务端的代码,服务端采用Java web的方式接收数据。
关于配置服务端的java、MySQL和Tomcat可以移步我的另一篇博客。
安卓部分
需要知道的一点就是在安卓中类似耗时过长的任务都是在子线程中,所以最好是单独写一个类,子线程返回到主线程中就使用handle。
安卓主要代码
OkHttpClient okHttpClient=new OkHttpClient();
for(LocalMedia localMedia:mSelectList) {
imagpath=localMedia.getCompressPath();
}//这里是图片的路径,选择图片我使用的是GitHub中的XUI框架
//new一个File对象,并传入路径
File file=new File(imagpath);
//这里是设置上传的类型为image,/*是不限制图片格式
RequestBody image=RequestBody.create(MediaType.parse("image/*"),file);
//请求体
RequestBody requestBody=new MultipartBody.Builder()
.setType(MultipartBody.ALTERNATIVE)//这个很重要,如果是上传图片的同时还需要其他参数,就需要ALTERNATIVE这个属性
.addFormDataPart("json",json)//参数以json的格式传输
.addFormDataPart("image",imagpath,image)//第一个参数是服务端接收的标记,第二个是路径,第三个是请求体信息
.build();
Request request=new Request.Builder()
.url(地址)//服务端地址,可以使用本地Tomcat,需要保证手机和电脑在同一局域网下,使用servlet接收数据
.post(requestBody)//post方式提交,这是必须的
.build();
服务端主要代码
@MultipartConfig
//这里要在servlet的import的下面加上,这个是必须的,可以规定上传的图片的大小
Part part=request.getPart("image");
//使用Part接收图片信息
String[] tempArr1 = part.getHeader("content-disposition").split(";");//获取上传的图片的路径
String[] tempArr2 = tempArr1[2].split("=");
String[] fileName = tempArr2[1].replaceAll("\"", "").split("/");//切割得到上传的文件名
String savepath=request.getServletContext().getRealPath("/")+"img/"+fileName[9];
/*
*以上四行是根据我的项目的获取需要的路径,可以根据自己的项目自定
*/
part.write(savepath);//将图片保存在指定的路径
String json_tude=request.getParameter("json");//获取上传的参数
以上就可以实现安卓上传图片,至于选择图片这一步可以参考XUI框架,或者百度其他的方式实现。