エラーメッセージ:
マルチパートサーブレットリクエストの解析に失敗しました。ネストされた例外は java.io.IOException です: 一時アップロード場所 [/tmp/tomcat.1428942566812653608.8090/work/Tomcat/localhost/ROOT] が無効です
[/tmp/tomcat.1428942566812653608.8090/work/Tomcat/localhost/ROOT] が見つからないことが表示されます。
その理由は、
centos には一時ファイルの自動クリーニング ルールがあるため、ファイルをアップロードするとシステムがエラーを表示するためです。長期間使用されない場合 (デフォルトでは 10 日間)、このディレクトリはクリーンアップされます。上記の問題が発生し、アップロードが失敗します。
分析
:
-
まず最初に、http POST リクエストの場合、投稿データを保存するためにこの一時ディレクトリを使用する必要があることを知っておく必要があります。
-
次に、このディレクトリは /temp ディレクトリの下にある一時ファイルであるため、centOS などの一部の OS システムでは、この一時ディレクトリは削除されることが多く、ディレクトリは存在しません。
これが理由かどうかを確認します。
まずサーバーにアクセスして、このディレクトリが存在するかどうかを確認します。
解決
- プロジェクトを再起動しますが、根本的な原因からの解決にはならず、長期間使用しなかった場合(centosの定義したルールに従ってクリーンアップされます)、クリーンアップ後もこの問題が発生します。
- application.yml 構成ファイルを変更します。
最初のタイプは次のとおりです。
spring:
# 文件上传
servlet:
multipart:
# 单个文件大小
max-file-size: 10MB
# 设置总上传的文件大小
max-request-size: 20MB
# 上传文件的中间位置
location: /alited/uploadPath
二番目
server:
tomcat:
#设定tomcat的basedir目录,如果没有指定则使用临时目录
basedir: /home/app/tomcat_upload_temp
もちろん、このディレクトリはここに存在する必要があります。
マルチパートサーブレットリクエストの解析に失敗しました。ネストされた例外は java.io.IOException です: 一時アップロード場所 [D:\alited\uploadPath\tmp] が無効です
存在しない場合でも上記のエラーは報告されますが、パスは変更されているため、スタートアップ クラスの下に構成を追加してディレクトリを自動的に作成できます。
public class StartApplication
{
@Value("${spring.servlet.multipart.location}")
private String tempDir;
public static void main(String[] args)
{
System.setProperty("spring.devtools.restart.enabled", "false");
SpringApplication.run(StartApplication.class, args);
}
/**
* 配置用来自动创建目录用来指定上传中间目录
*/
@Bean("mkdir")
public void mkDir(){
File file = new File(tempDir);
// 判断文件夹是否存在
if (!file.exists()){
//创建文件夹
file.mkdirs();
}
}
}