Skip to content

9.1. ファイルアップロード標準

9.1.1. ファイルサイズ制限

application.yml にファイルアップロードのサイズ制限を設定します。

yaml
spring:
  servlet:
    multipart:
      max-file-size: 10MB
      max-request-size: 50MB
設定デフォルト値説明
max-file-size10MB単一ファイルの最大サイズ
max-request-size50MBリクエスト全体の最大サイズ(複数ファイルを含む)

9.1.2. 許可拡張子 / MIMEタイプ検証

ファイルの拡張子とMIMEタイプの両方を検証しなければなりません。拡張子のみの検証では偽装が可能です。

java
@ConfigurationProperties(prefix = "app.storage")
public record StorageProperties(
    String uploadPath,
    long maxFileSize,
    List<String> allowedExtensions,
    List<String> allowedMimeTypes
) {}
yaml
app:
  storage:
    upload-path: /data/uploads
    max-file-size: 10485760
    allowed-extensions:
      - pdf
      - png
      - jpg
      - jpeg
      - gif
      - xlsx
      - docx
    allowed-mime-types:
      - application/pdf
      - image/png
      - image/jpeg
      - image/gif
      - application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
      - application/vnd.openxmlformats-officedocument.wordprocessingml.document

9.1.3. ファイル名処理

アップロードされたファイルは UUIDベースの保存名 で保存し、元のファイル名 はメタデータとして保持します。

java
public class FileNameGenerator {

  public static String generate(String originalFilename) {
    String extension = extractExtension(originalFilename);
    return UUID.randomUUID() + "." + extension;
  }

  private static String extractExtension(String filename) {
    int lastDot = filename.lastIndexOf('.');
    if (lastDot == -1) {
      throw new InvalidFileException("拡張子のないファイルはアップロードできません。");
    }
    return filename.substring(lastDot + 1).toLowerCase();
  }
}
項目ルール
保存ファイル名UUID + 拡張子 (550e8400-e29b-41d4-a716-446655440000.pdf)
元のファイル名DBに別途保存
拡張子小文字に統一

TIENIPIA QUALIFIED STANDARD