Struts2文件上传错误

时间:2013-08-30 04:06:43

标签: java file-io struts

我使用struts2文件上传,我的动作类包含3个带有getter和setter的私有文件

private File myFile;
private String myFileFileName;
private String myFileContentType;

我有一些需要澄清的内容

  1. 我们只传递文件作为参数并将其绑定到 myFile ,那么应用程序如何获取文件名和内容类型?

  2. 每当我使用myFileVariableName +" FileName" (如果文件变量是myFile,那么文件名变量是myFileFileName,如果file是xxx,那么文件名是xxxFileName),我得到输出,如果我对这种格式做了任何更改(即myFileVariableName +" FileName& #34;),它变为空。是否必须使用此格式?我可以将它更改为我想要的任何名称吗?如果是这样,那怎么样?

  3. 要获取内容类型,我应该使用jst" contentType"或myfileVariableName +" contentType"。它也是强制性的吗?

  4. 我假设,如果我使用单独的bean来存储我的请求变量,那么所有参数都绑定到该bean变量。但是在文件上传的情况下,只有文件变量ie, myFile 在这个例子中只在bean中获取和设置。 fileFileName和contentType为null。如果我直接在我的动作类中声明这些变量,那么我得到了值,但每当我使用单独的bean时,只有File变量可以获取和设置,而其他两个都是null。为什么呢?

  5. 如果我使用ModelDriven,同样的情况发生,我只能得到File变量而其他两个变量都是null。为什么呢?

  6. 我只是扩展" struts-default"在我的struts.xml中没有单独的文件上传配置,因为它在我的问题中没有显示任何效果。

1 个答案:

答案 0 :(得分:1)

用于文件上传的

动作类,声明文件变量来存储用户上传的文件,两个String变量用于存储文件名和内容类型。 fileUpload拦截器 自动注入上传的文件详情 ,通过设置'X' ContentType()并设置'X' FileName(),确保方法名称拼写正确。

  

文件上传功能取决于“fileUpload Interceptor”,   确保它包含在Action的堆栈中。幸运的是,   默认堆栈已包含“fileUpload Interceptor”。

字段 userImageContentType userImageFileName 是可选字段。如果提供了这些字段的 setter方法 struts2 将设置数据。这只是为了获取上传文件的一些额外信息。如果提供内容类型和文件名字符串,也请遵循命名标准。名称应为 ContentType FileName

  

例如,如果操作文件中的文件属性是私有文件   uploadedFile,内容类型将被uploadFileContentType和   文件名uploadedFileFileName。

在Struts 2中获取设置行为 将值分配给变量,而不是属性值。 例如,

public class SetTagAction extends ActionSupport{

private String msg;

public String setMsg(String msg) {
    this.msg = msg;
}
<s:set var="msg" value="%{'this is a message'}" />

许多Struts 2开发人员认为 set tag var =“msg”会通过setMsg()方法将值分配给关联的操作类。

这是错误的,set标签不会调用setMsg()方法,它只会将“value”赋给名为“msg”的变量,而不是action的属性值。