Struts2 Fileupload 在操作中给出空文件 class
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 页面中 select 一个 pdf 文件并单击上传按钮时,它为操作 class 的 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>
正在使用
- 文件上传拦截器的两倍
- 将您对 maximumSize 和 allowedTypes 的限制仅应用于第二个。
就这样
<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;
您可以在 this question 上找到完整示例。
3。您正在打印文件而不是文件名
System.out.println("Source File Name:"+fileUpload);
那是文件,不是文件名,顺便说一句,文件名是在另一个变量中传递的。
解决此问题并重试。另请注意,当全世界都在使用 <s:
时,使用 <tags:
作为前缀是不安全的。这样做没有任何好处,只会带来麻烦。只需使用 <s:
.
我正在尝试使用 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 页面中 select 一个 pdf 文件并单击上传按钮时,它为操作 class 的 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>
正在使用
- 文件上传拦截器的两倍
- 将您对 maximumSize 和 allowedTypes 的限制仅应用于第二个。
就这样
<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;
您可以在 this question 上找到完整示例。
3。您正在打印文件而不是文件名
System.out.println("Source File Name:"+fileUpload);
那是文件,不是文件名,顺便说一句,文件名是在另一个变量中传递的。
解决此问题并重试。另请注意,当全世界都在使用 <s:
时,使用 <tags:
作为前缀是不安全的。这样做没有任何好处,只会带来麻烦。只需使用 <s:
.