背景:最近遇到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=uploadFiles";try {String imageUrl="/storage/sdcard0/upload/yellow.jpg";RequestParams params=new RequestParams();//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(){@Overridepublic void onSuccess(int statusCode, Header[] headers, byte[] responseBody){String content=new String(responseBody);tvShowLog.setText("上传完成:"+content);}@Overridepublic void onFailure(int statusCode, Header[] headers,byte[] responseBody, Throwable error){tvShowLog.setText("上传失败");}};}


服务器端源码片段:

@RequestMapping(params="cmd=uploadFiles")@ResponseBodypublic JsonResult uploadFiles(@RequestParam Integer albumId,HttpServletRequest  request, HttpServletResponse response){JsonResult jsonResult = new JsonResult(true);try {//转换request为MultipartHttpServletRequest  MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;  //获取文件集合 Map fileMap = multipartRequest.getFileMap();//遍历多媒体文件  for (Map.Entry 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,到此为止


更多相关文章

  1. Android(安卓)SDK下载和更新失败的解决方法!!!
  2. 阅读《Android(安卓)从入门到精通》(2)——熟悉开发环境
  3. linux ,Android基础知识总结
  4. myEclipse8.5集成svn android svn使用
  5. [Android] 文件夹下文件的个数限制
  6. Android编译系统中的Android.bp、Blueprint与Soong
  7. Android之Telephony各文件解释
  8. 箭头函数的基础使用
  9. NPM 和webpack 的基础使用

随机推荐

  1. Android(安卓)编译命令
  2. 深入理解Android自定义View
  3. Android中库项目、jar包等的使用方法
  4. Android循环广告的实现
  5. Android手机游戏的救世主--PSX4Droid
  6. Android中给LineayLayout加边框
  7. Go,onAndroid
  8. android 适配器notifyDataSetChanged无法
  9. Android学习系列(30)--App列表之下拉刷新
  10. Android(安卓)ImageView的scaleType属性