首页 > 代码库 > Struts2上传文件(1)

Struts2上传文件(1)

   使用Struts框架后, Struts2框架不会处理multipart/form-data的请求,它需要调用其他的上传文件框架来解析二进制数据。但是Struts在原有的上传解析器基础上做了很多的封装,简化了文件上传。主要是在Struts核心包中的default.properties文件中的文件解析器,配置如下所示。

# struts.multipart.parser=cos
# struts.multipart.parser=pell
struts.multipart.parser=jakart

根据Struts框架的配置可知,在Struts中默认是使用jakart的Common-FileUpload的文件上传框架,因此要使用文件上传功能,还需要加入commons-io-*.jar 和commons-fileupload-*.jar文件到WEB-INF下的lib包中,然后Build path一下,就可以使用了。

上传文件只需要下列几部就可以成功上传文件。

1.jsp页面加入如下代码:

 <body> <s:form action="test!file.action" method="POST"
        enctype
="multipart/form-data">
        <s:file name="file" label="file"></s:file>
        <s:submit value="submit" />
    </s:form>
</body>

 2、编写文件上传action,在action中加入如下代码判断,并生成get和set方法

  private File file;//上传文件信息
    private String fileContentType;//上传文件类别
    private String fileFileName;//上传文件文件名

3、重命名文件名

   在此处主要是使用了java中的UUID类生成字符串作为文件名,代码如下所示

  String fileName = UUID.randomUUID().toString()+ fileFileName.substring(fileFileName.lastIndexOf("."),fileFileName.length());

4、获取文件上传路径

主要是使用了ServletActionContext中的方法,代码如下所示

String path = ServletActionContext.getServletContext().getRealPath("/upload/"+fileName);

5、最后一步使用java文件流将文件上传到指定的路径中,代码如下所示

   FileInputStream fis;
    try {
     fis = new FileInputStream(file);
     FileOutputStream fos = new FileOutputStream(path);
     byte[] buffer = new byte[1024];
     int len = 0;
     while ((len = fis.read(buffer)) > 0) {
      fos.write(buffer, 0, len);
     }
  } catch (Exception e) {
     e.printStackTrace();
     System.out.println("error:" + e.getMessage());
  }

完成上面几部之后,文件就可以成功上传到指定的文件夹中。但是,这个上传还处在许多的问题,上传文件的大小没有限制,文件的格式没有限制,这些都会带来很大的问题的,在后面的章节中将逐步的解决类似的问题。