struts2实现文件上传下载

来源:互联网 发布:淘宝网的案例分析 编辑:程序博客网 时间:2024/06/13 15:31

文件上传视图 :

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>首页</title></head><body>    <form action="upload.action" method="post" enctype="multipart/form-data">        文件:<input type="file" name="logo"/>        <input type="submit" value="提交">    </form>    文件下载: ${logoFileName }</a><br>    <a>文件大小:${fileSize }</a><br>    <a>文件上传时间:${uploadDate }</a><br>    <a href="download?logoFileName=${downFileName } ">查看</a></body></html>

首先,表单的enctype设置为multipart/form-data,要使得文件上传拦截器成功处理文件上传,这个就必须设置。然后要注意的是表单的action方法上传和文件上传字段的名称(即logoFileName )。我们需要这些信息来创建action方法和struts配置。

文件下载视图:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>    <base href="<%=basePath%>">    <title>文件下载</title>  </head>  <body>    文件下载:<a href="download?logoFileName=${downFileName }">${logoFileName }</a><br>    <a>文件大小:${fileSize }KB</a><br>    <a>文件上传时间:${uploadDate }</a>  </body></html>

创建Action类:

import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStream;import java.sql.Timestamp;import java.text.SimpleDateFormat;import java.util.Date;import org.apache.commons.io.FileUtils;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionSupport;//上传和下载文件public class UploadAction extends ActionSupport{    private File logo;    private String logoFileName;    private String logoContentType;    private String fileSize;    private String uploadDate;    public void setFileSize(String fileSize) {        this.fileSize = fileSize;    }    public String getFileSize() {        return fileSize;    }    public void setUploadDate(String uploadDate) {        this.uploadDate = uploadDate;    }    public String getUploadDate() {        return uploadDate;    }    private static String downFileName;    public  String getDownFileName() {        return downFileName;    }    public  void setDownFileName(String downFileName) {        this.downFileName = downFileName;    }    //上传文件    public String uploadFile(){         //String path=ServletActionContext.getRequest().getRealPath("/upload");         String path="E:/upload";         SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式         uploadDate = df.format(new Date());         System.out.println(uploadDate);// new Date()为获取当前系统时间         fileSize = (logo.length()/1024+1)+"KB";         System.out.println("文件大小:"+fileSize);         System.out.println(logoFileName);         downFileName=logoFileName;         System.out.println(downFileName);         try {            FileUtils.copyFile(logo, new File(path,logoFileName));        } catch (IOException e) {            e.printStackTrace();        }        return "success";    }    //ָ指定下载路径    public InputStream getInputStream() throws FileNotFoundException{        String path="E:/upload";        System.out.println(path+"/"+downFileName);        return new FileInputStream(path+"/"+downFileName);    }    public String downloadFile(){        return "success";    }    public File getLogo() {        return logo;    }    public void setLogo(File logo) {        this.logo = logo;    }    public String getLogoFileName() {        return logoFileName;    }    public void setLogoFileName(String logoFileName) {        this.logoFileName = logoFileName;    }    public String getLogoContentType() {        return logoContentType;    }    public void setLogoContentType(String logoContentType) {        this.logoContentType = logoContentType;    }}

默认情况下,FileUpload拦截器为你提供三个参数,它们分别按以下方式命名:

 1. [文件名参数] - 这是用户已上传的实际文件。在这个例子中它将是“logoFile” 2. [文件名参数]ContentType - 这是上传的文件的内容类型。在这个例子中,它将是“logoContentType” 3. [文件名参数]FileName - 这是上传的文件的名称。在这个例子中,它将是“logoFileName

struts配置:

<!-- 上传文件 -->        <action name="upload" class="uploadAction" method="uploadFile">            <result  name="success" >/hello.jsp</result>        </action>        <!-- 下载文件 -->        <action name="download" class="uploadAction" method="downloadFile">            <result type="stream">                 <param name="inputName">inputStream</param>                <param name="contentDisposition">                    attachment;filename=${uploadFileName}                </param>            </result>        </action>

修改上传文件的大小:

<constant name="struts.multipart.maxSize" value="100000000" />
原创粉丝点击