これは API 固有のコードです。つまり、通常のファイル アップロード コードではありません。
通常の手順は次のとおりです。
- FileItemFactory を構築する
- ServletFileUpload を構築し、それをファクトリに渡します
- ServletFileUpload.parseRequest(リクエスト) を呼び出す
この回答は、2と3をサーブレットに依存しないロジックに置き換えます-ServletFileUpload(サーブレット固有)とその祖先FileUpload(絶対パス名でファイルの場所を制御するため)の使用を回避します。注: (3) 通常、HTTP 要求パラメーターを調べて、FileItemFactory.createItem に渡される下位レベルのパラメーターを決定します。これらのパラメーターは代わりに手動で提供され、情報メタデータとしてのみ使用されます。2 & 3 の交換:
- FileItem を構築します (FileItemFactory.createItem を介して - 通常は ServletFileUpload.upload() を介して決定される下位レベルのパラメーターを手動で提供する必要があります)
- 絶対パスで特定のファイルに書き込む
- MultipartFile 経由でファイルをアップロードする
以下に提供される要求されたコード。最後に、サーブレットのアップロードと共有される共通コードを呼び出します。
// Initialise Apache Commons FileItemFactory for API use only
FileItemFactory fif = new DiskFileItemFactory(sizeThreshold, repositoryBaseDirFile);
// Create Apache Commons FileItem & write file at fullFilePathString into it
FileItem fi = fif.createItem(fieldName, contentType, isFormField, fileName);
fi.write(new java.io.File(new java.net.URI(fullFilePathString));
// Convert FileItem to Spring wrapper: CommonsMultipartFile
org.springframework.web.multipart.MultipartFile mf = new CommonsMultipartFile(fi);
// From here, reuse the same code as the servlet upload. Operate only upon
// Spring MultipartFile, but not ServletFileUpload, FileItemFactory etc...
パラメーター:
- fullFilePathString : ファイルがアップロードされる絶対パス (文字列として)
- fieldName : フォーム上のフィールドの名前
(ServletFileUpload と FileUpload は回避されるため、以下はメタデータ フィールドのみになり、処理の制御には使用されません)
- sizeThreshhold : メモリ サイズのしきい値 (バイト単位) (通常、小さいファイルはメモリのみを使用してアップロードされ、大きいファイルはディスク経由でアップロードされますが、このロジックではファイルは常にディスク経由でアップロードされます)。デフォルト = DiskFileItemFactory.DEFAULT_SIZE_THRESHOLD。
- repositoryBaseDireFile :通常、ファイル アップロードの 'temp' ディレクトリ (ファイル タイプとして) ですが、このロジックでは絶対パスを使用してファイルをアップロードします
- contentType : フォームのフィールドのコンテンツ タイプ (MIME タイプ) (マルチパート フォーム フィールドでない場合は null)
- isFormField : プレーン フォーム フィールドの場合は「true」、それ以外の場合はマルチパート フィールドの場合は false。
- fileName : ファイルの名前 - 通常はフォーム / クライアント経由で指定されます。