Uploadify:使用Struts2无法正常工作

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Uploadify:使用Struts2无法正常工作相关的知识,希望对你有一定的参考价值。

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

struts.multipart.parser=jakarta

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

你可以使用MultipartRequestWrapper获得ServletActionContext,请参阅How do we upload files

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

然后params interceptor,它是defaultStack的一部分,使用该动作上下文参数,将它们置于动作属性中。

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

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

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

以上是关于Uploadify:使用Struts2无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

Uploadify按钮功能无法执行

解决jQuery uploadify在非IE核心浏览器下无法上传

工作中碰到uploadify插件两个版本:HTML5和Flash

解决thinkphp3.2.3下使用uploadify 302错误的方法

uploadifive struts2实现图片上传

解决Chrome浏览器和IE浏览器上传附件兼容的问题 -- Chrome关闭flash后,uploadify插件不可用的解决办法