struts2文件上传需要注意的

① 必须封装三个字段:文件、文件类型、文件名,而且这三个字段的名字的前面几个字母是一样的

  如:

private File upload;
private String uploadContentType;
private String uploadFileName;

由File名upload,确定了文件类型这个字段的名字必须为uploadContentType,不能是upContentType,不能是upcontenttype

由File名upload,确定了文件名这个字段的名字必须为uploadFileName,不能是upFileName,不能是uploadfilename

如果你的File名是uploadFile那么确定了:uploadFileContentType, uploadFileFileName

<s:form action="up" enctype="multipart/form-data">
    <s:file name="upload" label="选择文件"/><br/>
    <s:submit value="上传"/>
</s:form>

注意form的enctype属性为multipart/form-data,file的name属性要和Action类中的file字段的名字一致

③ 可以配置savePath:

/*****方法一: Annotation******/
@Action(params={"savePath", "/uploadFiles"})






/****方法二: struts.xml********/
<action name="up" class="com.xxx.action.UpAction">
    <!-- 动态设置Action的属性值 -->
    <param name="savePath">/uploadFiles</param>
    <!-- 配置Struts 2默认的视图页面 -->
    <result>/WEB-INF/content/succ.jsp</result>    
</action>

然后在Action中加入setSavePath(正常,略)和getSavePath():

public String getSavePath() {
    return ServletActionContext.getServletContext().getRealPath(savePath);
}

④ 读取文件和写入文件(包括生成文件夹):

  

public String execute() throws Exception {
    //生成文件夹
    File filePath = new File(getSavePath());
    if (!filePath.exists()) {
        filePath.mkdirs();
        System.out.println("mkdirs");
    }
    //以服务器的文件保存地址和原文件名建立上传文件输出流
    FileOutputStream fos = new FileOutputStream(getSavePath()
        + "\" + getUploadFileName());
    FileInputStream fis = new FileInputStream(getUpload());
    byte[] buffer = new byte[1024];
    int len = 0;
    while ((len = fis.read(buffer)) > 0) {
        fos.write(buffer , 0 , len);
    }
    fos.close();
    return SUCCESS;
}

注意实例化FileOutputStream时,构造参数的"\",忘了这个文件名就和路径连接在一起了

 

原文地址:https://www.cnblogs.com/lanhj/p/3381401.html