我的JSP页面是这样的:
$(function() {
$("#file_upload").uploadify({
'height': 27,
'width': 80,
'buttonText':'浏览',
'swf':'<%=basePath%>admin/tupian/js/uploadify.swf',
'uploader': '<%=basePath%>Imguploadoper.img',
'auto' : false,
'fileTypeExts' : '*.jpg'
});
});
这是我的java代码:
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setHeaderEncoding("UTF-8");
try {
//this line returns null
List items = upload.parseRequest(request);
Iterator itr = items.iterator();
while (itr.hasNext()) {
......
}
} catch (FileUploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
out.flush();
out.close();
upload.parseRequest(request)
返回 null
。我真的不知道原因。
这是在Struts2中上传时常见的错误。您不应该在操作中解析请求。我相信你已经在action中编写了java代码。因此,Struts2 通过
MultipartRequestWrapper
处理多部分请求,它使用配置常量
struts.multipart.parser=jakarta
JakartaMultiPartRequest
,用于解析请求并将文件放入此常量定义的位置struts.multipart.saveDir
,如果未设置此常量则javax.servlet.context.tempdir
使用默认。您可以使用
MultipartRequestWrapper
获得
ServletActionContext
,请参阅我们如何上传文件. 然后
拦截器,它是
defaultStack
的一部分,使用maltipart请求获取所有接受的文件、接受的文件名和接受的内容类型,并将它们放入操作上下文中。然后
拦截器(它是
defaultStack
的一部分),使用该操作上下文参数,将它们放入操作属性中。当多部分请求包装时,这是由
Dispatcher
完成的,并且在实例化包装器时parsed,您可以检查
saveDir
中的文件,如果上传完成且没有错误。要执行文件上传,请确保提交多部分请求,即表单
enctype
属性为
"multipart/form-data"
,拦截器将应用于显式引用它们的操作或隐式使用拦截器
defaultStack
。在该操作中,使用文件名、内容类型和文件的 getters/setters 创建属性。如果您的上传成功,请在操作属性中检查您的文件。要了解更多信息,您可以练习以下示例: