背景:最近遇到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] 文件夹下文件的个数限制
  2. Android之Telephony各文件解释
  3. Android 自定义View及其在布局文件中的使用示例(二)
  4. android UI设计之 背景透明色 项目资源文件关系
  5. android文件系统制作教程
  6. android通过USB的MTP模式下,禁止用户在根目录有任何操作(重命名 删
  7. android 驱动文件权限设置

随机推荐

  1. 速看!php artisan 命令列表
  2. 或许你想去掉Response Headers中的X-Powe
  3. 关于PHP CURL上传二进制流图片
  4. 关于php preg_replace_callback回调函数
  5. PHP读取Excel图片对象,并保存替换为相对路
  6. PHP最大连接数的设置及php-fpm高并发参数
  7. PHP基础案例四:展示学生列表
  8. PHP实用函数集合
  9. 详解PHP sprintf()格式化用法
  10. 通过PHP内置web服务器实现简单的调试应用