まず、http POSTリクエストの場合、この一時ディレクトリを使用してPOSTデータを保存する必要があることを知っておく必要があります。
次に、ディレクトリは/ tempディレクトリにぶら下がっている一時ファイルであるため、centOSなどの一部のOSシステムでは、この一時ディレクトリが削除されることが多く、その結果、ディレクトリは存在しなくなります。
解決
1.application.yml
ファイルに設定しmultipart
location
、プロジェクトを再起動します
spring:
http:
multipart:
location: /data/upload_tmp
2.application.yml
ファイルに設定します
server
tomcat:
basedir: /tmp/tomcat
3.構成ファイルを追加しますbean
@Bean
public MultipartConfigElement multipartConfigElement() {
MultipartConfigFactory factory = new MultipartConfigFactory();
factory.setLocation("/tmp/tomcat");
return factory.createMultipartConfig();
}
4.起動パラメータ-java.tmp.dir=/path/to/application/temp/
を追加して再起動します。
上記はすべてRuoyiの公式サイトを参照していますが、一時ディレクトリ内の異常ファイルを削除できないという欠点があるため、以下の方法を使用しました。
5.5。TomcatEmbeddedServletContainerFactory.setBaseDirectory(file);
@Configuration
public class TomcatConfig {
private static final Log LOG = LogFactory.get();
@Bean
public TomcatEmbeddedServletContainerFactory servletContainer() {
TomcatEmbeddedServletContainerFactory factory = new MyTomcatEmbeddedServletContainerFactory();
// 服务上下文配置
// factory.setContextPath("/test");
setBaseDirAndClean(factory);
return factory;
}
// 指定内置tomcat的工作目录
private void setBaseDirAndClean(
TomcatEmbeddedServletContainerFactory factory) {
File file = new File("./tomcat/laker/tmp");
try {
if (FileUtil.exist(file)) {
List<File> files = FileUtil.loopFiles(file);
if (CollUtil.isNotEmpty(files)) {
for (File delfile : files) {
delfile.delete();
}
}
} else {
FileUtil.mkdir(file);
}
} catch (IORuntimeException e) {
LOG.error(e);
}
factory.setBaseDirectory(file);
}
}
参照:
- https://doc.ruoyi.vip/ruoyi/other/faq.html#tomcat%E4%B8%B4%E6%97%B6%E7%9B%AE%E5%BD%95tmp%E6%8A%9B% E9%94%99%E8%AF%AF%E5%BC%82%E5%B8%B8