SpringBoot批量上传图⽚
⽬录
技术概述
技术作⽤:⽤在批量上传多张图⽚到服务器。
学习原因:⽤户上传图⽚如果每次只允许单张上传,重复操作给⽤户体验感不好,需要⽀持批量上传图⽚。
技术难点:保存图⽚的路径、图⽚上传存在⼤⼩限制
技术详述
⾸先后端⽤⼀个MultipartFile数组来接收前端传来的图⽚数组,再调⽤图⽚⼯具类PictureUrlUtil循环写⼊图⽚,再将拼接后的路径写⼊数据库。
for (int i = 0; i < files.length; i++) {
String filePath = PathUtil.FilePath(files[i]),userId);
PictureUrlUtil.writePicture(files[i],filePath,clothingPath); //将图⽚输出到clothingPic⽂件夹
int subtypeId = Integer(i);
filePath = place(".jpg",".png");
wardrobeDao.importPic(filePath, userId, subtypeId);
}
路径拼接在多处需要复⽤,⽽且写的时候很容易错,所以写成⼀个路径⼯具类,⽤以⽣成路径。在Linux系统上路径全为正斜杠。服务器上需要建三个⽂件夹⽤于存放⽤户头像图⽚、⾐物图⽚、博客图⽚。
/**
* 将图⽚输出到与项⽬同⼀级的⽂件夹下
* @param file 图⽚
* @param fileFolderName ⽂件夹名称
*/
public static void writePicture(MultipartFile file,String fileName,String fileFolderName){
try{
FileOutputStream picOutput = new FileOutputStream("/outfits/" + fileFolderName + "/" + fileName); //设置⽂件路径
picOutput.Bytes()); //获取字节流直接写⼊到磁盘内
springboot框架的作用picOutput.close();
}
catch (Exception e){
}
}
/**
* 获取图⽚本地路径
* @param multipartFile 图⽚名称
* @return
*/
public static String getFilePath(MultipartFile multipartFile){
String realfilePath = "";
try{
realfilePath += OriginalFilename();
}
catch (Exception e){}
return realfilePath;
}
由于还实现了抠图,所以最后插⼊数据库的是抠过的图的路径。⽤户上传⾐物流程如下:
技术难题与解决过程
技术难题在于上传多张图⽚时会失败。最开始根据报错在⽹上了很多⽅法都没有解决,经过多次上传不同个数、不同类型的图⽚,发现规律:只上传不⼤于1MB的图⽚会成功;如果传多张图⽚,基本只能上传成功⼀张。再查资料发现因为springboot默认最⼤⽀持上传1MB以下的⽂件,需要对框架进⾏配置。
解决⽅法为在resources⽂件夹下的application.properties中添加以下内容:
spring.abled =true
spring.servlet.multipart.file-size-threshold =0
spring.servlet.multipart.maxFileSize=500MB
spring.servlet.multipart.maxRequestSize=500MB
abled =true 表⽰允许⽂件上传
multipart.file-size-threshold =0 表⽰⽀持⽂件写⼊磁盘
multipart.maxFileSize=500MB 表⽰最⼤⽀持⽂件⼤⼩为500MB
multipart.maxRequestSize=500MB 表⽰最⼤⽀持请求⼤⼩
总结
实现起来本⾝不难,但是会有⼀些bug和难以注意到细节。⼿⼯测试会⽐较慢,⽽且覆盖不全⾯,借助⾃动化测试就能提⾼效率,较快地解决问题。
springboot框架本⾝通过注释和⼀些封装的⽅法就能够简化代码,并且集成了ssm,配置简单。尤其时DAO层的代码优化后,维护起来⽅便很多,不然会显得对数据库的操作变得臃肿。后期学有余⼒应该要阅读springboot源码,可以在学会使⽤的基础上优化框架的性能。
参考博客
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论