zoukankan      html  css  js  c++  java
  • 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());
      }

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

  • 相关阅读:
    netty系列之:基于流的数据传输
    netty系列之:中国加油
    netty系列之:Event、Handler和Pipeline
    netty系列之:netty中的Channel详解
    netty系列之:netty架构概述
    Python 列表解析式竟然支持异步?
    Python 数值中的下划线是怎么回事?
    Nginx+keepalived 双机主从模式下修改主Nginx自动同步nginx.conf配置文件至备Nginx
    Oracle nvarchar2存储特殊字符乱码问题
    Oracle 11.2.0.4.0版本下大表添加默认值字段影响因素
  • 原文地址:https://www.cnblogs.com/gyouxu/p/3746491.html
Copyright © 2011-2022 走看看