0

我的 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。我真的不知道原因。

4

1 回答 1

0

这是在 Struts2 中上传时的常见错误。您不应该在操作中解析请求。我相信你已经在action中编写了java代码。因此,Struts2 通过MultipartRequestWrapper使用配置常量来处理多部分请求

struts.multipart.parser=jakarta

对应于多部分请求适配器JakartaMultiPartRequest,用于解析请求并将文件放到此常量定义的位置struts.multipart.saveDir,如果未设置此常量,则javax.servlet.context.tempdir默认使用。

您可以MultipartRequestWrapper使用ServletActionContext,请参阅 我们如何上传文件

然后fileUpload拦截器,它是 的一部分defaultStack,使用 maltipart 请求获取所有接受的文件、接受的文件名和接受的内容类型,并将它们放入操作上下文中。

然后params拦截器,它是 的一部分defaultStack,使用该动作上下文参数,将它们放入动作属性中。

当多部分请求包装时,由 完成Dispatcher,并在包装​​器实例化时解析saveDir,如果上传完成且没有错误,您可以检查 中的文件。

要执行文件上传,请确保您提交多部分请求,即表单enctype属性 is"multipart/form-data"和拦截器应用于显式引用它们或隐式使用defaultStack拦截器的操作。在该操作中,使用 getter/setter 为文件名、内容类型和文件创建属性。如果您的上传成功,则在操作属性中检查您的文件。

要了解更多信息,您可以练习以下示例:

于 2013-09-03T15:48:42.727 回答