今天通过springboot实现上传功能时遇到的以下问题
1.文件上传大小受到限制
网上很多都是添加spring.http.mutipart,但是yml会报deprecated configuration property...的错误,意思就是过时了。
之后在https://blog.csdn.net/csdn710924032/article/details/82753180文章中找到解决方法。将http换为servlet。成功解决问题。
spring:
servlet:
multipart:
enabled: true
max-file-size: 1024mb
max-request-size: 1024mb
第二种方式是通过添加配置类的方式
@SpringBootApplication //声明被注解标注的类是springboot的入口类
@MapperScan(value = "com.testspringboot.mapper")
@Configuration
public class TestspringbootApplication {
public static void main(String[] args) {
SpringApplication.run(TestspringbootApplication.class, args);
}
@Bean
public MultipartConfigElement multipartConfigElement() {
MultipartConfigFactory factory = new MultipartConfigFactory();
//单个文件最大
factory.setMaxFileSize("5MB");
/// 设置总上传数据总大小
factory.setMaxRequestSize("50MB");
return factory.createMultipartConfig();
}
}
通过@Configuration与@bean注解的方法实现。
2.多文件上传时一次性选择多个问题
一次性选择多个文件就是在input type ="file”标签中添加 multiple。
<form method="POST" enctype="multipart/form-data" action="/upload/testuploadimgs">
<p>文件1:<input type="file" name="file" multiple/></p>
<p><input type="submit" value="上传" /></p>
</form>
下面是我的代码:考虑到要经常上传所以将上传的方法封装到一个工具类中。
工具类:
public class FileUtil {
/**
* 第一步:判断文件是否为空 true:返回提示为空信息 false:执行第二步
* 第二步:判断目录是否存在 不存在:创建目录
* 第三部:通过输出流将文件写入硬盘文件夹并关闭流
* @param file
* @return
*/
public static String uploadFile(MultipartFile file){
String fileName = file.getOriginalFilename();
String filePath = "D:\\repository\\";
File targetFile = new File(filePath);
//第一步:判断文件是否为空
if(file.isEmpty())return fileName+"文件为空";
//第二步:判断目录是否存在 不存在:创建目录
if(!targetFile.exists()){
targetFile.mkdirs();
}
//第三部:通过输出流将文件写入硬盘文件夹并关闭流
BufferedOutputStream stream = null;
try {
stream = new BufferedOutputStream(new FileOutputStream(filePath+fileName));
stream.write(file.getBytes());
stream.flush();
}catch (IOException e){
e.printStackTrace();
}finally {
try {
if (stream != null) stream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return fileName+"上传成功";
}
}
controller层代码:
//处理文件上传
@RequestMapping(value="/testuploadimg", method = RequestMethod.POST)
public @ResponseBody String uploadImg(@RequestParam("file") MultipartFile file, HttpServletRequest request) {
String info = null;
try {
info = FileUtil.uploadFile(file);
} catch (Exception e) {
e.printStackTrace();
}
return info;
}
//处理多文件上传
@RequestMapping(value="/testuploadimgs", method = RequestMethod.POST)
@ResponseBody
public String multipleFilesUpload(HttpServletRequest request){
//获取上传的文件数组
List<MultipartFile> files = ((MultipartHttpServletRequest) request).getFiles("file");
//遍历处理文件
String info = null;
for (MultipartFile file:files) {
try {
String s = FileUtil.uploadFile(file);
info = info+"-"+s;
} catch (Exception e) {
e.printStackTrace();
}
}
return info;
}