我正在尝试使用struts2 fileUpload拦截器在我的Web应用程序中实现文件上传过程。下面是我的代码
index.jsp
<tags:form action="fileUpload" method="post" enctype="multipart/form-data"> <tags:file name="fileUpload" label="Choose File"/> <tags:submit value="Upload"/> </tags:form>
struts.xml
<action name="fileUpload" class="com.hibernate.action.FileUploadAction"> <interceptor-ref name="fileUploadStack"/> <interceptor-ref name="fileUpload"> <param name="maximumSize">1024000</param> <param name="allowedTypes">application/pdf</param> </interceptor-ref> <result name="success">/viewChapters.jsp</result> </action>
FileUploadAction.java
public class FileUploadAction extends ActionSupport { private File fileUpload; private String contentType; private String fileName; private String destPath; /// setter and getter methods public String execute() { destPath="C:\\WebPortal_testing"; try { System.out.println("Source File Name:"+fileUpload); System.out.println("Destination File Name:"+fileName); File destFile= new File(destPath,fileName); FileUtils.copyFile(fileUpload, destFile); } catch(IOException exception) { exception.printStackTrace(); return ERROR; } return SUCCESS; }
当我在index.jsp页面中选择一个pdf文件并单击上载按钮时,它为操作类的fileUpload字段提供了空值。
我在调试模式下执行应用程序,并为此
System.out.println("Source File Name:"+fileUpload);
检查它返回什么,我得到空。
1.拦截器配置错误
FileUploadStack是:
<!-- Sample file upload stack --> <interceptor-stack name="fileUploadStack"> <interceptor-ref name="fileUpload"/> <interceptor-ref name="basicStack"/> </interceptor-stack>
那么您真正定义的是:
<interceptor-ref name="fileUpload"/> <interceptor-ref name="basicStack"/> <interceptor-ref name="fileUpload"> <param name="maximumSize">1024000</param> <param name="allowedTypes">application/pdf</param> </interceptor-ref>
使用
做就是了
<interceptor-ref name="fileUploadStack"> <param name="fileUpload.maximumSize">1024000</param> <param name="fileUpload.allowedTypes">application/pdf</param> </interceptor-ref>
2.文件属性错误
内容类型和文件名属性必须以文件属性名开头。
在您的情况下:
private File fileUpload; private String fileUploadContentType; private String fileUploadFileName;
您可以找到有关此问题的完整示例。
3.您正在打印文件而不是文件名
那是文件,不是文件名,而文件名是在另一个变量中传递的。
解决此问题,然后重试。另请注意,<tags:当全世界都在使用时,将其用作前缀是不安全的<s:。这样做没有任何好处,只有并发症。只需使用<s:。
<tags:
<s: