Java IOS客户端上传多张图片到服务端
生活随笔
收集整理的這篇文章主要介紹了
Java IOS客户端上传多张图片到服务端
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
Java IOS客戶端上傳多張圖片到服務(wù)端
業(yè)務(wù)場(chǎng)景:用戶相冊(cè)需要上傳多張圖片到服務(wù)器,上限為12張。本文主要介紹Java服務(wù)端的文件和流的處理。 下圖為iOS端和服務(wù)端最終結(jié)果一覽。
?iOS端?:
服務(wù)端:
如圖在debug模式下,(MultipartHttpServletRequest)?request 接收到的參數(shù)為multtipartFiles[]的一個(gè)數(shù)組。
每一項(xiàng)包括文件名、文件流、和文件大小。這項(xiàng)我們就通過(guò)遍歷數(shù)組然后將文件寫(xiě)入到服務(wù)器的文件中,將新文件、文件URL、對(duì)應(yīng)的用戶ID 保存到數(shù)據(jù)庫(kù)。
關(guān)于下面的code首先進(jìn)行一下簡(jiǎn)要的說(shuō)明:
BufferedInputStream 和?BufferedOutputStream 流的使用
CommonsMultipartFile類型的文件
對(duì)文件拓展名的判斷
對(duì)文件在服務(wù)器存儲(chǔ)URL和文件名的處理,我將上傳的 原文件名+訂單號(hào)生成工具+拓展名(.jpg|.png)
/*** 上傳相冊(cè)* * @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("用戶完善基本資料開(kāi)始");Response res = this.getReponse();CommonsMultipartFile multipartFile = null;BufferedInputStream is = null; BufferedOutputStream out = null; // 準(zhǔn)備好一個(gè)輸出的對(duì)象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("圖片數(shù)量超過(guò)上限");}}}else {return res.failure("該文件類型不能夠上傳");}}return res.success("上傳成功");} catch (Exception e) {log.error("errorMsg:--- 用戶相冊(cè)上傳失敗" + 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:
業(yè)務(wù)場(chǎng)景:用戶相冊(cè)需要上傳多張圖片到服務(wù)器,上限為12張。本文主要介紹Java服務(wù)端的文件和流的處理。 下圖為iOS端和服務(wù)端最終結(jié)果一覽。
?iOS端?:
服務(wù)端:
如圖在debug模式下,(MultipartHttpServletRequest)?request 接收到的參數(shù)為multtipartFiles[]的一個(gè)數(shù)組。
每一項(xiàng)包括文件名、文件流、和文件大小。這項(xiàng)我們就通過(guò)遍歷數(shù)組然后將文件寫(xiě)入到服務(wù)器的文件中,將新文件、文件URL、對(duì)應(yīng)的用戶ID 保存到數(shù)據(jù)庫(kù)。
關(guān)于下面的code首先進(jìn)行一下簡(jiǎn)要的說(shuō)明:
/*** 上傳相冊(cè)* * @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("用戶完善基本資料開(kāi)始");Response res = this.getReponse();CommonsMultipartFile multipartFile = null;BufferedInputStream is = null; BufferedOutputStream out = null; // 準(zhǔn)備好一個(gè)輸出的對(duì)象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("圖片數(shù)量超過(guò)上限");}}}else {return res.failure("該文件類型不能夠上傳");}}return res.success("上傳成功");} catch (Exception e) {log.error("errorMsg:--- 用戶相冊(cè)上傳失敗" + 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相關(guān)的技術(shù)問(wèn)題,可以發(fā)私信與我交流。
- NPM地址:??https://www.npmjs.com/~noseparte
- WebSite:?http://www.noseparte.com/???Copyright ? 2017 noseparte
總結(jié)
以上是生活随笔為你收集整理的Java IOS客户端上传多张图片到服务端的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 关于原神抽奖概率的简要分析
- 下一篇: java美元兑换,(Java实现) 美元