我的问题是setSizeThreshold和setRepository是如何工作的。Java Commons File Upload,size,repository
纠正我,如果我错了,我的理解是如果文件大小> setSizeThreshold(什么数目)然后它应该发送文件到setRepository临时存储。但我从来没有看到这个文件存储在setRepository(filePath)中。我没有设置FileCleaningTracker,因此在技术上该文件应该仍然在setRepository(filePath)中?
- 如何测试Repository是否正在工作?有没有办法?
这是我的代码,一切都是从doc没有什么特别的。
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);
}
}
在DOC
Larger items should be written to a temporary file on disk.
Very large upload requests should not be permitted.
- 究竟是什么 “非常大”?什么大小被认为非常大?
在此先感谢...
**题外话:主要观点基于:**你基本上是问的东西,不能比你自己以外的任何人来回答。你认为什么大。我定期与PETABYTES的数据合作,我的观点与其他大多数人相比将会大不相同。与其他人一样。 –