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

本文介绍了如何在Java服务端处理来自iOS客户端的多张图片上传请求,涉及MultipartHttpServletRequest的处理、文件流的读取、存储路径生成、文件名格式验证以及数据库记录保存。通过实例代码展示了文件上传、URL生成及用户ID关联的过程。
摘要由CSDN通过智能技术生成

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

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

iOS端 :

AAffA0nNPuCLAAAAAElFTkSuQmCC

服务端:

AAffA0nNPuCLAAAAAElFTkSuQmCC

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

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

AAffA0nNPuCLAAAAAElFTkSuQmCC

关于下面的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 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 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();

}

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值
>