版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013758734/article/details/39504075
背景:最近遇到Android上传图片到服务器,今天研究了一下,还挺简单的,我用的是android-async-http,版本是1.4.4。
工具下载地址:https://github.com/loopj/android-async-http/tree/1.4.6/releases
官网也有介绍:http://loopj.com/android-async-http/
Android源码片段:private void uploadImage()
{
//上传请求地址
String url="http://172.16.3.129:8082/jd-web/FileUpload.do?cmd=<span style="font-family: Arial, Helvetica, sans-serif;">uploadFiles</span><span style="font-family: Arial, Helvetica, sans-serif;">";</span>
try {
String imageUrl="/storage/sdcard0/upload/yellow.jpg";
RequestParams params=new RequestParams();
<span style="white-space:pre"> </span>//params.add("cmd","uploadFiles");//接口名
//params.add("albumId","93345");//相册ID
//上传的时候,下面这个参数是最主要的,就是设置文件的地方,其中put方法的第一个参数的值无所谓,没有什么要求,
//开始我一直以为是一个特定的值,然后服务器会根据这个key来取值,后来发现不是,这个可以随便取,
//第三个参数"application/octet-stream",也可以不传,我发现服务器端可以自动识别。
//params.put("image", new File(imageUrl),"application/octet-stream");
params.put("profile_picture", new File(imageUrl));
HttpUtil.post(url,params, uploadResponseHander());
} catch (FileNotFoundException e) {
e.printStackTrace();
tvShowLog.setText("参数设置错误");
}
}
/**
* 上传回调
* @return
*/
private AsyncHttpResponseHandler uploadResponseHander()
{
return new AsyncHttpResponseHandler()
{
@Override
public void onSuccess(int statusCode, Header[] headers, byte[] responseBody)
{
String content=new String(responseBody);
tvShowLog.setText("上传完成:"+content);
}
@Override
public void onFailure(int statusCode, Header[] headers,
byte[] responseBody, Throwable error)
{
tvShowLog.setText("上传失败");
}
};
}
@RequestMapping(params="cmd=uploadFiles")
@ResponseBody
public JsonResult uploadFiles(@RequestParam Integer albumId,HttpServletRequest request, HttpServletResponse response){
JsonResult jsonResult = new JsonResult(true);
try {
//转换request为MultipartHttpServletRequest
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
//获取文件集合
Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
//遍历多媒体文件
for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
//获取多媒体文件信息
MultipartFile mf = entity.getValue();
//获取字节数组,这个是最重要的,这个字节数组就是刚才上传的文件转换而成的
byte[] bytes = mf.getBytes();
//获取上传的文件的名字
String fileName = mf.getOriginalFilename();
}
} catch (Exception e)
{
}
return jsonResult;
}
可以使用Spring的Util包中FileCopyUtils工具类,将此字节数组保存成本地的图片文件:
FileCopyUtils.copy(mf.getBytes(), “D:\ImageUpload\xxx.jpg);
OK,到此为止