Java IOS客户端上传多张图片到服务端

业务场景用户相册需要上传多张图片到服务器,上限为12张。本文主要介绍Java服务端的文件和流的处理。 下图为iOS端和服务端最终结果一览。

 iOS端 :



服务端

如图在debug模式下,(MultipartHttpServletRequest) request 接收到的参数为multtipartFiles[]的一个数组。

每一项包括文件名、文件流、和文件大小。这项我们就通过遍历数组然后将文件写入到服务器的文件中,将新文件、文件URL、对应的用户ID 保存到数据库。


关于下面的code首先进行一下简要的说明:

  1. BufferedInputStream 和 BufferedOutputStream 流的使用
  2. CommonsMultipartFile类型的文件
  3. 对文件拓展名的判断
  4. 对文件在服务器存储URL和文件名的处理,我将上传的 原文件名+订单号生成工具+拓展名(.jpg|.png)
/*** 上传相册* * @param photo* @return*/@RequestMapping(value = Router.User.COMPLETE_ALBUM_INFORMATION, method = RequestMethod.POST)@ResponseBodypublic Response complete_album_information(@RequestParam("userId") int userId,MultipartHttpServletRequest request, HttpServletResponse response) {log.info("用户完善基本资料开始");Response res = this.getReponse();CommonsMultipartFile multipartFile = null;BufferedInputStream is = null;  BufferedOutputStream out = null;  // 准备好一个输出的对象try {Iterator<String> itr =  request.getFileNames();while(itr.hasNext()){String str = itr.next();multipartFile = (CommonsMultipartFile)request.getFile(str);String[] fileExts = {"jpg", "png"};String fileName = multipartFile.getOriginalFilename();   //原文件名String fileExt = fileName.substring(fileName.lastIndexOf(".") + 1, fileName.length());if (Arrays.binarySearch(fileExts, fileExt) != -1) {MultipartFile mpf = request.getFile(str);InputStream inputStream = mpf.getInputStream();is = new BufferedInputStream(inputStream);String url = "D:\\programmeTools\\nginx-1.12.1\\photo" + "/" + str + OrderGeneratedUtils.getOrderNo()  + "." + fileExt;File newFile = new File(url);if(is != null) {out = new BufferedOutputStream(new FileOutputStream(newFile));  byte[] buffer = new byte[1024];  int len = -1;  while ((len = is.read(buffer)) != -1) {  out.write(buffer, 0, len);  }String name = str + OrderGeneratedUtils.getOrderNo() + "." + fileExt;List<UserAlbum> albumList = userAlbumService.findByUserId(userId);if(albumList.size() < 10) {UserAlbum album = new UserAlbum(userId,name, url, new Date());userAlbumService.save(album);}else {res.failure("图片数量超过上限");}}}else {return res.failure("该文件类型不能够上传");}}return res.success("上传成功");} catch (Exception e) {log.error("errorMsg:--- 用户相册上传失败" + e.getMessage());return res.failure(e.getMessage());}finally {if(is != null) {  try {  is.close();  }catch (Exception e) {  e.printStackTrace();  }  }  if(out != null) {  try {  out.close();  }catch (Exception e) {  e.printStackTrace();  }  }  }}

About Me:
  • Github地址:https://github.com/noseparte
  • Email:  noseparte@aliyun.com     有java与hadoop相关的技术问题,可以发私信与我交流。
  • NPM地址:  https://www.npmjs.com/~noseparte
  • WebSite: http://www.noseparte.com/   Copyright © 2017 noseparte

Java IOS客户端上传多张图片到服务端相关推荐

  1. nodejs ajax进度条,Ajax异步文件上传与NodeJS express服务端处理的示例分析

    Ajax异步文件上传与NodeJS express服务端处理的示例分析 发布时间:2021-07-24 11:17:21 来源:亿速云 阅读:79 作者:小新 这篇文章主要介绍Ajax异步文件上传与N ...

  2. 使用java向ftp上传多张图片_ftp免费空间,利用ftp工具定时连接ftp免费空间教程及java配置...

    IIS7服务器管理工具 这款ftp客户端软件,可以批量管理ftp站点,还可以实现ftp定时上传.定时下载,定时备份.自动更新等功能. 关于ftp客户端功能,它主要实现以下四点功能: 1.ftp 批量操 ...

  3. iOS连续上传多张图片

    参考地址:http://www.cocoachina.com/ios/20180730/24366.html 需求是怎样的:for 循环里面.多个网络请求上传图片,每次上传一张,至于为什么每次只上传一 ...

  4. Android客户端上传文件,C#服务端接收文件

    Android客户端代码 public static String uploadImage(File file, String RequestURL) {String result = "e ...

  5. 微信小程序头像上传+(C#)服务端接收

    第一步:样式设置(WXSS) 说明:.imagesize给view使用,.avatar给image使用.作用是把图片显示为圆形. .imagesize{display:flex; justify-co ...

  6. [PHP]利用XAMPP搭建本地服务器, 然后利用iOS客户端上传数据到本地服务器中(四. iOS端代码实现)...

    一.安装XAMPP   http://www.cnblogs.com/lidongxu/p/5256330.html 二. 配置MySql  http://www.cnblogs.com/lidong ...

  7. java 大文件上传 断点续传(Socket、IO流)

    java两台服务器之间,大文件上传(续传),采用了Socket通信机制以及JavaIO流两个技术点,具体思路如下: 实现思路: 1.服:利用ServerSocket搭建服务器,开启相应端口,进行长连接 ...

  8. ajax请求多张图片数据库,ajax上传多文件,一次上传多张图片

    ajax上传多文件,一次上传多张图片 作者:PHPYuan 时间:2018-11-04 03:41:44 使用ajax上传文件,指望这个对象:let fd = new FormData(); html ...

  9. linux搭建ftps(vsftpd),java代码测试上传下载

    一.服务器安装 操作系统Ubuntu:sudo apt-get install vsftpd操作系统Centos:sudo yum install -y vsftpd##创建ftps用户,设置默认目录 ...

最新文章

  1. c语言程序设计第二版第五章课后答案甘勇,郑州工程技术学院副院长甘勇来校讲学和指导工作...
  2. SQL Server索引设计 第五篇
  3. 初探swift语言的学习笔记五(线程)
  4. vim normal 模式下L键
  5. 【线段树 集合hash】bzoj4373: 算术天才⑨与等差数列
  6. SpringMVC介绍之约定优于配置
  7. java json.tostring,idea以JSON形式重写toString()方法
  8. leetcode解题报告:Interleaving String
  9. android 边框重叠,android - Android:recyclerview中的viewitems轮廓与recyclerview边框重叠 - 堆栈内存溢出...
  10. PxCook 高效智能的研发设计工具。点击设计稿即可生成前端代码的智能标注切图软件
  11. mysql查询出现ambiguous的问题
  12. android手机电话铃声设置,安卓怎么设置铃声 安卓手机铃声设置教程
  13. Thinkphp 5.0实战 仿百度糯米开发多商家电商平台
  14. c#计算标准偏差实现跟excel中一样的STDEVP()
  15. Dubbo监控中心Dubbo-admin安装
  16. Linux配置SVN 服务端
  17. 图像识别自动化android,Android自动化测试
  18. 《人性的弱点》卡耐基
  19. 一阶电路误差分析_RC有源低通滤波器的一阶二阶原理分析及其推导!
  20. 不忘初心,做一行爱一行

热门文章

  1. 暗影格斗3服务器响应比预期,暗影格斗3代码问题导致无法正常游戏
  2. python+appium爬取微信运动数据,并分析好友的日常步数情况
  3. win7开启ftp被动模式_Win7上防火墙开放FTP服务以及ping解决方案
  4. nvidia驱动升级和nvidia-docker2安装
  5. R语言 | 二分类和多分类的逻辑回归实现
  6. R语言学习笔记(二) 逻辑运算符
  7. 网易云音乐 真实地址
  8. Facebook第三方登录流程总结
  9. PASSWORD_VERIFY_FUNCTION(口令复杂性验证)
  10. 纯日记+游戏推荐(妈妈把我的游戏藏起来了)