fiv*_*git 18 spring spring-mvc spring-boot
我正在使用Spring Boot,需要让用户上传文件进行处理.现在,文件上传到/ home/username/git/myproject,这不是很好.
如何让Spring将这些文件上传到一个临时目录中,该目录将通过应用程序重启(或其他方式)定期清除?
这是我尝试过的......但它不起作用.文件仍保存到我的工作目录.
public class Application implements CommandLineRunner {
/*
* This doesn't seem to work.
*/
@Bean
MultipartConfigElement multipartConfigElement() {
MultipartConfigFactory factory = new MultipartConfigFactory();
factory.setMaxFileSize("128KB");
factory.setMaxRequestSize("128KB");
factory.setLocation(System.getProperty("java.io.tmpdir"));
return factory.createMultipartConfig();
}
/* other stuff, main(), etc */
}
Run Code Online (Sandbox Code Playgroud)
PS我只是通过执行应用程序运行我的应用程序,它使用嵌入式Tomcat.
更新:
好的,我把它整理好了.我正在将传入的MultipartFile转换为普通文件,如下所示:
private File convertMultipartFileToFile(MultipartFile file) throws IOException
{
File convFile = new File(file.getOriginalFilename());
convFile.createNewFile();
FileOutputStream fos = new FileOutputStream(convFile);
fos.write(file.getBytes());
fos.close();
return convFile;
}
Run Code Online (Sandbox Code Playgroud)
相反,我应该在指定的临时目录中创建一个新文件,如下所示:
private File convertMultipartFileToFile(MultipartFile file) throws IOException
{
File convFile = File.createTempFile("temp", ".xlsx"); // choose your own extension I guess? Filename accessible with convFile.getAbsolutePath()
FileOutputStream fos = new FileOutputStream(convFile);
fos.write(file.getBytes());
fos.close();
return convFile;
}
Run Code Online (Sandbox Code Playgroud)
现在您可能会问,"那么application.properties文件的'multipart.location'设置呢?" 回想起来,这个设置只能控制短暂的多部分文件的位置.如果您使用脚本观察该目录,您将看到"upload_.tmp"文件短暂出现然后消失.'multipart.location'与您可能创建的任何持久性File对象无关.
(注意,您可以使用上面的MultipartBean代码段而不是application.properties,但我没有尝试它,为什么要这样做?)
要更改真实临时目录的值,可以使用"-Djava.io.tmp =/path/to/dir"VM参数在运行Spring Boot应用程序之前指定所需的任何内容.
Qy *_*Zuo 20
在springboot 1.4.1.RELEASE中
spring.http.multipart.max-file-size=10MB
spring.http.multipart.max-request-size=10MB
spring.http.multipart.enabled=true
spring.http.multipart.location= ..
Run Code Online (Sandbox Code Playgroud)
会好的.
Lea*_*edo 16
由于您使用的是Spring Boot,因此MultipartProperties在application.properties文件中使用它更容易.
从文档属性示例:
# MULTIPART (MultipartProperties)
multipart.enabled=true
multipart.file-size-threshold=0 # Threshold after which files will be written to disk.
multipart.location= # Intermediate location of uploaded files.
multipart.max-file-size=1Mb # Max file size.
multipart.max-request-size=10Mb # Max request size.
Run Code Online (Sandbox Code Playgroud)
您还可以从MultipartProperties中读取详细说明.
要配置系统tmpdir,您可以设置:
multipart.location=${java.io.tmpdir}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
35874 次 |
| 最近记录: |