Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 982|回复: 0

struts2实现上传文件

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2011-6-6 15:49:01 | 显示全部楼层 |阅读模式

    在上传文件时,struts2会将文件保存后放到临时文件夹中,然后把路径设置到File属性上。在Action中直接饮用即可。注意该文件只是临时的,上传结束后Struts2会将文件删除,因为UploadAction中需要将该文件复制出来。该临时文件的名称也不是上传文件的原名称,而是Struts2根据时间戳随机生成的,后缀为“.tmp”,目的是保证临时文件名不会有重复。
        如果要或得该文件的原始名称,还需要定义一个String类型的属性,属性名必须为xxxFileName,其中xxx为File属性的名称(即本例中的picture)。Struts会将源文件名设置到该属性上。例如UploadAction中的pictureFileName属性。
       如果要获取该文件的原始MIME类型,需要定义一个String类型的属性,属性名必须为xxxContentType,其中xxx也为File属性的名称(即本例中的picture)。struts会将源文件的MIME类型设置到该属性上。比如UploadAction中的pictureContentType。
    [color=#990066,strength=3);]UploadAction.java

    public class UploadAction extends ActionSupport {
    private File picture; //上传的文件。Struts会将文件封装为File对象
    private String pictureContentType; //文件类型。Struts 2 会将文件类型设置到该变量
    private String pictureFileName; //文件名称。Struts会将文件名称设置到该变量
    public String execute(){
      return "input";
    }
    public String upload() throws Exception{
      File saved = new File(ServletActionContext.getServletContext().getRealPath("upload"),pictureFileName); //最终文件保存到/upload下
      InputStream ins = null; //文件输出流
      OutputStream ous = null;  //文件输出流
      try{
       saved.getParentFile().mkdirs();  //确保文件夹/upload存在
       
       ins = new FileInputStream(picture); //读入临时文件
       ous = new FileOutputStream(saved); //写入到upload下
       
       byte[] b = new byte[1024]; //字节缓存
       int len = 0;
       while((len = ins.read(b)) != -1){  //循环读入,直接结束SS
        ous.write(b,0,len);   //写入文件
       }
      }catch(Exception e){
       e.printStackTrace();
      }finally{
       if(ous != null) ous.close();
       if(ins != null) ins.close();
      }
      return "list";
    }
    public File getPicture() {
      return picture;
    }
    public void setPicture(File picture) {
      this.picture = picture;
    }
    public String getPictureContentType() {
      return pictureContentType;
    }
    public void setPictureContentType(String pictureContentType) {
      this.pictureContentType = pictureContentType;
    }
    public String getPictureFileName() {
      return pictureFileName;
    }
    public void setPictureFileName(String pictureFileName) {
      this.pictureFileName = pictureFileName;
    }
    }
    上传文件的JSP表单:
    [color=#990066,strength=3);]upload.jsp

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%@ taglib uri="/struts-tags" prefix="struts" %>
    <HTML>
      <body>
      <struts:actionerror/> <!-- 显示错误信息 -->
      <struts:form action="upload" enctype="multipart/form-data" method="post" validate="true">
          <struts:label value="上传文件"></struts:label> <!-- 标签 -->
          <struts:file name="picture" label="文件一"></struts:file> <!-- 文件域 -->
          <struts:submit value=" 开始上传 " method="upload"></struts:submit> <!-- 上传按钮 -->
      </struts:form>
      </body>
    </html>
    上传成功的页面代码如下:
    [color=#990066,strength=3);]uploadList.jsp
    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%@ taglib uri="/struts-tags" prefix="struts" %>
    <html>
      <body>
      文件已经保存到:
      <a href="upload/<struts:property value="pictureFileName"/>" target=_blank><struts:property value="pictureFileName"/></a><br/><br/>
      <<<a href="upload.action">继续上传</a>
      </body>
    </html>
    Action配置为:
    [color=#990066,strength=3);]struts.xml­
           <action name="upload" class="com.zhangjie.struts2.action.UploadAction">
               <interceptor-ref name="fileUpload">  <!-- 文件上传参数设置 -->
                  <param name="allowedTypes">image/bmp,image/x-png,image/gif,image/jpeg</param> <!-- 允许上传的类型 -->
                  <param name="maximumSize">20480</param>
               </interceptor-ref>
               <interceptor-ref name="defaultStack"/> <!-- 默认的拦截器堆栈 -->
              <result name="input">/upload.jsp</result>
              <result name="list">/uploadList.jsp</result>
           </action>
    注:其中allowedTypes为允许上传的MIME类型,maximumSize­设置上传的允许大小,不能大于2097152字节
    错误信息设置:
    ­#自定义的资源文件
    struts.custom.il8n.resources
    com.zhangjie.struts2.resources.Resources
    struts.multipart.saveDir = /temp
    struts.multipart.maxSize = 10000000
    运行效果如下:









    ­[color=#990066,strength=3);]

    [color=#990066,strength=3);][color=#990066,strength=3);][color=#990066,strength=3);]
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-20 10:10 , Processed in 0.443294 second(s), 50 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表