Struts——文件上传

回顾:

Struts提交的文件上传组件来上传文件:
前台
  • 提交方式POST
  • 表单类型:multipart/form-date
  • input type=“file”
后台
  • Apache提供的FileUpload组件
  • 核心类:
			FileItemFactory			//FileItem的核心工厂
			ServletFileUpload		//servlet中文件上传的核心类
			FileItem				//封装了上传的表单文件项信息

总之,文件上传比较麻烦!!

文件上传demo

public class FileUpload extends ActionSupport {

    //对应表单
    private File file1;
    //文件名
    private String file1FileName;
    //文件类型(MIME)
    private String fileContentType;

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

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

    public void setFileContentType(String fileContentType) {
        this.fileContentType = fileContentType;
    }

    @Override
    public String execute() throws Exception {
        //拿到上传的文件进行处理
        //把文件上传到upload目录
        //获取上传的目录的路径
        String path = ServletActionContext.getServletContext().getRealPath("/upload");
        //创建目标文件对象
        File destFile = new File(path,file1FileName);
        //把上传的文件拷贝到目标文件中
        FileUtils.copyFile(file1,destFile);

        System.out.println("FileUpload.execute()");
        return SUCCESS;
    }
}

用户名:
文件:
 
        
       
           /e/success.jsp
       

    

文件上传细节处理

文件大小限制:
struts2默认支持的文件上传最大是2M
通过常量修改
		
    		
限制上传文件的允许的类型:
需求: 只运行txt/jpg后缀的文件
拦截器:注入参数从而限制文件上传类型。
		   
           
               
                txt,jpg,zip
               
               text/plain
               
           

错误提示:
当文件上传出现错误的时候,struts内部会返回input视图(错误视图),所以就需要我们在struts.xml中配置input视图对应的错误页面。

文件下载

文件下载,两种方式:
  1. 通过response对象向浏览器写入字节流数据,设置下载的相应信息。
  2. struts的方式。
 文件下载中配置文件的配置:
 
            
            /e/list.jsp

            
            
                
                application/octet-stream
                
                attrInputStream
                
                attachment;filename=${downFileName}
                
                1024
            
        
 /****************2.文件下载*************************/

    //1.获取请求的要下载的文件的文件名
    private String fileName;
    public void setFileName(String fileName){
        //传入的参数中文问题(get提交)
        try {
            fileName = new String(fileName.getBytes("ISO8859-1"),"UTF-8");
        } catch (UnsupportedEncodingException e) {
            throw new RuntimeException(e);
        }
        //给处理好的文件名赋值
        this.fileName = fileName;
    }

    //2.下载提交的业务方法(在struts.xml中配置返回stream)
    public String down() throws Exception {

        return "download";
    }

    //3.返回文件流的方法
    public InputStream getAttrInputStream(){
        return ServletActionContext.getServletContext().getResourceAsStream("/upload/"+fileName);
    }

    //4.下载显示的文件名(浏览器显示的文件名)
    public String getDownFileName(){
        //需要进行中文编码
        try {
            fileName = URLEncoder.encode(fileName,"utf-8");
        } catch (UnsupportedEncodingException e) {
            throw new RuntimeException(e);
        }
        return fileName;
    }

你可能感兴趣的:(Struts——文件上传)