我正在尝试在servlet中上传一个excel并对其进行处理。上传时我在表单中设置了enctype =“multipart / form-data”。但是在我的servlet中.isMultiPart(request)返回false。
JSP代码:
function fSubir()
{
fFreezeButtons();
this.document.forms[0].action="../servlet/renault.saf.demandepiece.demandes.servlet.AjouterPoste";
if (this.document.forms[0].Flag.value == "1")
{
this.document.forms[0].Flag.value = "0";
this.document.forms[0].submit();
}
}
选择.xlsx类型文件:
<input type="submit" value="upload" onclick="fSubir()"/>
我的.Jsp还有另一种形式的get方法,它没有任何enctype。
Servlet代码;
public class AjouterPoste扩展了SapprServlet {
/**
*
*/
private static final long serialVersionUID = 1L;
private final String UPLOAD_DIRECTORY = "/appli01/safdev01/saf_cl2/test/";
public void performTask(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
System.out.println("inside the AjouterPoste class - performTask");
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
System.out.println("Inside doPost:"+isMultipart+":"+request);
请查找我正在尝试上传文件的代码部分。
答案 0 :(得分:0)
当您提交包含multipart/form-data
的表单时,您无法使用request.getParameter(paramName)
。而是使用下面的代码(Apache FileUpload
库的一部分)
try {
List<FileItem> items = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request);
for (FileItem item : items) {
if (item.isFormField()) {
// this part is used instead of request.getParameter
String fieldName = item.getFieldName();
String fieldValue = item.getString();
// do something here
} else {
// this is the file processing part
String fieldName = item.getFieldName();
String fileName = FilenameUtils.getName(item.getName());
InputStream fileContent = item.getInputStream();
...
}
}
} catch (FileUploadException e) {
throw new ServletException("exception", e);
}
通过检查FileItem.isFormField()
方法返回true
,您可以判断特定项目是常规表单项(而不是文件)。