为了账号安全,请及时绑定邮箱和手机立即绑定

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

标签:
Java iOS
Java IOS客户端上传多张图片到服务端

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


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


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

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

/**
        * 上传相册
        *
        * @param photo
        * @return
        */
       @RequestMapping(value = Router.User.COMPLETE_ALBUM_INFORMATION, method = RequestMethod.POST)
       @ResponseBody
       public 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("该文件为空");
                           }
                      }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(); 
                } 
            } 
             }

       }

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消