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

1 篇文章 0 订阅
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)
	@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("该文件类型不能够上传");
		         }
		    }
			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:


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值