查看: 2643|回复: 0

[IOS开发教程] Java IOS客户端上传多张图片到服务端

发表于 2018-1-29 08:00:02
Java IOS客户端上传多张图片到服务端

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


如图在debug模式下,(MultipartHttpServletRequest) request 接收到的参数为multtipartFiles[]的一个数组。
每一项包括文件名、文件流、和文件大小。这项我们就通过遍历数组然后将文件写入到服务器的文件中,将新文件、文件URL、对应的用户ID 保存到数据库。
图片描述


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

BufferedInputStream 和 BufferedOutputStream 流的使用
CommonsMultipartFile类型的文件
对文件拓展名的判断
对文件在服务器存储URL和文件名的处理,我将上传的 原文件名+订单号生成工具+拓展名(.jpg|.png)

  1. /**
  2. * 上传相册
  3. *
  4. * @param photo
  5. * @return
  6. */
  7. @RequestMapping(value = Router.User.COMPLETE_ALBUM_INFORMATION, method = RequestMethod.POST)
  8. @ResponseBody
  9. public Response complete_album_information(@RequestParam("userId") int userId,MultipartHttpServletRequest request, HttpServletResponse response) {
  10. log.info("用户完善基本资料开始");
  11. Response res = this.getReponse();
  12. CommonsMultipartFile multipartFile = null;
  13. BufferedInputStream is = null;
  14. BufferedOutputStream out = null; // 准备好一个输出的对象
  15. try {
  16. Iterator<String> itr = request.getFileNames();
  17. while(itr.hasNext()){
  18. String str = itr.next();
  19. multipartFile = (CommonsMultipartFile)request.getFile(str);
  20. String[] fileExts = {"jpg", "png"};
  21. String fileName = multipartFile.getOriginalFilename(); //原文件名
  22. String fileExt = fileName.substring(fileName.lastIndexOf(".") + 1, fileName.length());
  23. if (Arrays.binarySearch(fileExts, fileExt) != -1) {
  24. MultipartFile mpf = request.getFile(str);
  25. InputStream inputStream = mpf.getInputStream();
  26. is = new BufferedInputStream(inputStream);
  27. String url = "D:\\programmeTools\\nginx-1.12.1\\photo" + "/" + str + OrderGeneratedUtils.getOrderNo() + "." + fileExt;
  28. File newFile = new File(url);
  29. if(is != null) {
  30. out = new BufferedOutputStream(new FileOutputStream(newFile));
  31. byte[] buffer = new byte[1024];
  32. int len = -1;
  33. while ((len = is.read(buffer)) != -1) {
  34. out.write(buffer, 0, len);
  35. }
  36. String name = str + OrderGeneratedUtils.getOrderNo() + "." + fileExt;
  37. List<UserAlbum> albumList = userAlbumService.findByUserId(userId);
  38. if(albumList.size() < 10) {
  39. UserAlbum album = new UserAlbum(userId,name, url, new Date());
  40. userAlbumService.save(album);
  41. }else {
  42. res.failure("图片数量超过上限");
  43. }
  44. }else {
  45. return res.failure("该文件为空");
  46. }
  47. }else {
  48. return res.failure("该文件类型不能够上传");
  49. }
  50. }
  51. return res.success("上传成功");
  52. } catch (Exception e) {
  53. log.error("errorMsg:--- 用户相册上传失败" + e.getMessage());
  54. return res.failure(e.getMessage());
  55. }finally {
  56. if(is != null) {
  57. try {
  58. is.close();
  59. }catch (Exception e) {
  60. e.printStackTrace();
  61. }
  62. }
  63. if(out != null) {
  64. try {
  65. out.close();
  66. }catch (Exception e) {
  67. e.printStackTrace();
  68. }
  69. }
  70. }
  71. }
复制代码



回复

使用道具 举报