私の質問は、setSizeThreshold と setRepository がどのように機能するかです。
私が間違っている場合は修正してください。私の理解では、ファイルサイズ> setSizeThreshold(数値が何であれ)の場合、ファイルをsetRepository一時保存に送信する必要があります。しかし、このファイルが setRepository(filePath) に保存されていることはありません。私は FileCleaningTracker を設定しなかったので、技術的にはファイルはまだ setRepository(filePath) にあるはずですか?
- リポジトリが機能しているかどうかをテストする方法は? 方法はありますか?
これが私のコードです。すべてがドキュメントからのもので、特別なことは何もありません。
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
if(isMultipart){
// Create a factory for disk-based file items
DiskFileItemFactory factory = new DiskFileItemFactory();
// Set factory constraints
factory.setSizeThreshold(20480); // purposely make it small to test
factory.setRepository(new File(root + "tempFile"));
// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload(factory);
//upload.setSizeMax(20480); // This makes the upload stop
try
{
// Parse the request
List<FileItem> items = upload.parseRequest(request);
// Process the uploaded items
Iterator<FileItem> i = items.iterator();
while(i.hasNext())
{
FileItem item = i.next();
//request.setAttribute("item", item);
if(item.isFormField()){
String fieldName = item.getFieldName();
String fieldValue = item.getString();
out.println(fieldName + ": " + fieldValue);
}
else
{
String fieldName = item.getFieldName();
String fileName = item.getName();
String contentType = item.getContentType();
boolean isInMemory = item.isInMemory();
long sizeInBytes = item.getSize();
File name = new File(item.getName());
// File.separator: "/"
item.write( new File(root + "uploads" + File.separator + name));
}
}
} catch (FileUploadException ex)
{
ex.printStackTrace();
} catch (Exception ex)
{
Logger.getLogger(uploadFileServlet.class.getName()).log(Level.SEVERE, null, ex);
}
}
ドキュメントで
Larger items should be written to a temporary file on disk.
Very large upload requests should not be permitted.
- 「非常に大きい」とは正確には何ですか?非常に大きいと見なされるサイズは?
前もって感謝します...