无法使用Struts 2和Uploadify进行文件上传

问题描述 投票:0回答:1

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

jsp file-upload struts2 uploadify
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

完成的,并且在实例化包装器时
parsed,您可以检查saveDir
中的文件,如果上传完成且没有错误。

要执行文件上传,请确保提交多部分请求,即表单

enctype

 属性为 
"multipart/form-data"
,拦截器将应用于显式引用它们的操作或隐式使用拦截器 
defaultStack
。在该操作中,使用文件名、内容类型和文件的 getters/setters 创建属性。如果您的上传成功,请在操作属性中检查您的文件。

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

  • Struts 2 文件上传示例
  • Struts 2 上传多个文件示例
© www.soinside.com 2019 - 2024. All rights reserved.