Struts2 文件上传与下载

1.文件上传

1.1必要条件:
(1)表单的method必须是post

(2)表单enctype必须是mulipart/form-data

(3)提供input type=“file”类型上传输入域,在 struts2中文件上传是由 fileUpload 拦截器完成的

2.1单文件上传


Action:
public class singleUploadAction extends ActionSupport {
    private String name;
    private File photo;//文件名必须是file类型,名字对应着表单的上传输入域
    private  String photoFileName;//固定写法:xxxFileName,文件名字
    private String photoContentType; //固定写法,上传文件的MIME 类型
    public String upload() throws IOException {
        System.out.println(name);
        System.out.println(photoContentType);
  ServletContext servletContext = ServletActionContext.getServletContext();
        //存到这里面
String diectory =servletContext.getRealPath("/file");
// servletContext.getClassLoader().getResourceAsStream();
//得到流
        //构建目标文件,需要两个参数
        //文件目录,文件的名字 ,把photo写进target
        File target = new File(diectory,photoFileName);
        //写入文件
        //复制
        FileUtils.copyFile(photo,target);
        return SUCCESS;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public File getPhoto() {
        return photo;
    }
    public void setPhoto(File photo) {
        this.photo = photo;
    }
    public String getPhotoFileName() {
        return photoFileName;
    }
    public void setPhotoFileName(String photoFileName) {
        this.photoFileName = photoFileName;
    }
    public String getPhotoContentType() {
        return photoContentType;
    }
    public void setPhotoContentType(String photoContentType) {
        this.photoContentType = photoContentType;
    }
}


struts.xml:


<package name="singleUpload" extends="struts-default">
        <action name="upload" class="singleUploadAction的路径" method="upload">
            <!--显示文件后缀-->
    <interceptor-ref name="defaultStack">
 <param name="fileUpload.allowedExtensions">.jpg,.png,</param>
     </interceptor-ref>
       <result name="success">success.jsp</result>
       <result name="input">singleFileUpload.jsp</result>
        </action>
    </package>

jsp:
<%--文件上传--%>
<s:actionerror/>
<s:fielderror/>
//显示错误信息
<form action="${pageContext.request.contextPath}/upload.action" method="post" enctype="multipart/form-data">
    姓名:<input type="text" name="name">
   图片:<input type="file" name="photo">
    <input type="submit" value="上传">
</form>
//最后输出的文件在out里面

路径

2.2多文件上传:

Action:
public class UploadAction extends ActionSupport {
    private String username;
    private List<File> file1;
    private List<String> file1FileName;
    private List<String> file1ContentType;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public List<File> getFile1() {
        return file1;
    }

    public void setFile1(List<File> file1) {
        this.file1 = file1;
    }

    public List<String> getFile1FileName() {
        return file1FileName;
    }

    public void setFile1FileName(List<String> file1FileName) {
        this.file1FileName = file1FileName;
    }

    public List<String> getFile1ContentType() {
        return file1ContentType;
    }

    public void setFile1ContentType(List<String> file1ContentType) {
        this.file1ContentType = file1ContentType;
    }

  public String upload() throws IOException {
      ServletContext servletContext = ServletActionContext.getServletContext();
      String path = servletContext.getRealPath("/file");
      //构建目标文件,需要两个参数
      //文件目录,文件的名字 ,把photo写进target
      for (int i = 0; i < file1.size(); i++) {
          File file=new File(path,file1FileName.get(i));
          FileUtils.copyFile(file1.get(i),file);
      }

      return SUCCESS;
  }
}


xml:
 <package name="upload2" extends="struts-default">
        <action name="upload2" class="UploadAction的路径" method="upload">
            <result name="success">success.jsp</result>
            <result name="input">Upload.jsp</result>
        </action>
    </package>

jsp:
<form action="${pageContext.request.contextPath}/upload2.action" enctype="multipart/form-data" method="post">
    用户名:<input type="text" name="username"><br>
    上传文件:<input type="file" name="file1"><br>
    上传文件:<input type="file" name="file1"><br>
    <input type="submit" value="提交">
</form>

2.3 文件下载
2.3.1书写规范:
inputStream / fileName
struts.xml中action result的type=“stream”两个参数:
inputName[输入流的属性名]
contentDisposition=attachment;filename=${fileName}[通知浏览器以下载形式打开]

Action:
public class DownloadAction extends ActionSupport {
    //定义一个输入流,把你要下载的东西给这个inputstream,名字随意,in 不行
    public InputStream inputStream;
    private String fileName;
    public String download() throws IOException {
        //实现下载,就是给inputstream
        String realPath = ServletActionContext.getServletContext().getRealPath("/五百年.jpg");
        //获得文件file,来获得名字
        fileName= FilenameUtils.getName(realPath);
        fileName=filenameEncoding(FilenameUtils.getName(realPath),ServletActionContext.getRequest(),ServletActionContext.getResponse());

        inputStream=new FileInputStream(realPath);
        return SUCCESS;
    }

    public InputStream getInputStream() {
        return inputStream;
    }

    public void setInputStream(InputStream inputStream) {
        this.inputStream = inputStream;
    }

    public String getFileName() {
        return fileName;
    }

    public void setFileName(String fileName) {
        this.fileName = fileName;
    }
    public String filenameEncoding(String filename, HttpServletRequest request, HttpServletResponse response) throws IOException {
        String agent = request.getHeader("User-Agent"); //获取浏览器的类型    System.out.println(agent);
        if (agent.contains("Firefox")) {
            BASE64Encoder base64Encoder = new BASE64Encoder();
            filename = "=?utf-8?B?"    +base64Encoder.encode(filename.getBytes("utf-8"))
                    + "?=";
        } else if(agent.contains("MSIE")) {
            filename = URLEncoder.encode(filename, "utf-8");
        } else if (agent.contains("Safari")){
            filename = new String(filename.getBytes("UTF-8"),"ISO8859-1");
        }else {
            filename = URLEncoder.encode(filename, "utf-8");
        }
        return filename;
    }
}


xml: 
<package name="download" extends="struts-default">
   <action name="download" class="DownloadAction动作类的路径" method="download">
     <result name="success" type="stream">
                <!--指定动作类中输入流,属性名-->
      <param name="inputName">inputStream</param>
                <!--通知浏览器以下载IDE形式打开-->
 <param name="contentDisposition">attachment;filename=${fileName}</param>
      <!--ognl表达式来获取值-->
        </result>
   </action>
</package>

jsp:  
<a href="${pageContext.request.contextPath}/download.action">
下载</a>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值