![](/img/trans.png)
[英]FileUpload, Struts2, no file in FileUploaderInterceptor
[英]Struts2 Fileupload giving null file in the action class
我正在嘗試使用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.攔截器配置錯誤
<!-- 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.您正在打印文件而不是文件名
System.out.println("Source File Name:"+fileUpload);
那是文件,不是文件名,而文件名是在另一個變量中傳遞的。
解決此問題,然后重試。 另請注意,當全世界都在使用<s:
時,使用<tags:
作為前綴並不安全。 這樣做沒有任何好處,只有並發症。 只需使用<s:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.