我不确定为什么带有标签enctype =“multipart / form-data”的html表单不会传递它应该传递的对象。这就是mozilla和firefox的情况。
对于IEs的情况,例如,我使用html控件来选择一个文件,它确实得到它应该得到的。
现在我只想知道是否有任何替代方法可以通过http请求对象传递文件,因为enctype =“multipart / form-data”似乎有一些兼容性问题,但我不确定< / p>
任何建议将不胜感激! :d
答案 0 :(得分:3)
首先,你必须提供一些代码来展示你做了什么,并知道出了什么问题。无论如何,我假设您必须使用HTML文件上传控件将文件上传到服务器。
multipart/form-data
实施中未实现文件上传或HttpServlet
编码类型支持。因此,request.getParameter()
不适用于multipart/form-data
。您必须使用其他库来为此提供支持。 Apache Commons File Upload就是一个很好的例子。他们的using fileupload指南将帮助您开始使用该库。这是一个简单的例子(使用文件上传指南编译)。
// Check that we have a file upload request
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
if (isMultipart) {
// Create a factory for disk-based file items
FileItemFactory factory = new DiskFileItemFactory();
// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload(factory);
// Parse the request
List /* FileItem */ items = upload.parseRequest(request);
// Process the uploaded items
Iterator iter = items.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
if (item.isFormField()) {
// Process form field.
String name = item.getFieldName();
String value = item.getString();
} else {
// Process uploaded file.
String fieldName = item.getFieldName();
String fileName = item.getName();
String contentType = item.getContentType();
boolean isInMemory = item.isInMemory();
long sizeInBytes = item.getSize();
if (writeToFile) {
File uploadedFile = new File("path/filename.txt");
item.write(uploadedFile);
}
}
}
} else {
// Normal request. request.getParameter will suffice.
}
答案 1 :(得分:1)
所以我只是将application / octet-stream添加到有效的文件类型中,它现在似乎正在工作