博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
文件上传及下载
阅读量:6294 次
发布时间:2019-06-22

本文共 5972 字,大约阅读时间需要 19 分钟。

一、要实现文件上传,需在项目中添加两个jar文件

Jsp页面

单个文件上传

Action类

public class UploadAction extends ActionSupport{    //封装上传文件属性    private File upload;    //封装上传文件的类型    private String uploadContentType;    //封装上传文件名称    private String uploadFileName;    //获取文件上传的路径    private String savePath;        @Override    public String execute() throws Exception {        byte[] buffer=new byte[1024];                //读取文件        FileInputStream fis=new FileInputStream(getUpload());        //保存文件        FileOutputStream fos=new FileOutputStream(getSavePath()+"\\"+this.getUploadFileName());        int length=fis.read(buffer);        while(length>0){            //每次写入length长度的内容            fos.write(buffer,0,length);            length=fis.read(buffer);        }        fis.close();        fos.flush();        fos.close();                return SUCCESS;    }      //获取文件上传的保存路径 通过读取存放目录获得保存路径       public String getSavePath() {          return ServletActionContext.getServletContext().getRealPath(savePath);     }

在Action中使用了三个属性封装文件信息:

File类型的XXX属性,与表单的File控件的name属性一样,用于封装File控件对应的文件内容

String类型的xxxFileName属性,该属性名称由前面的File类型属性和FileName组合,是固定的语法,是封装File控件对应文件的文件名

String类型的XXXContentType属性,同样由xxx属性和ContentType组合而成,是固定语法,封装File控件对应文件的文件类型

配置Action:

/upload
ok.jsp

上传成功后的结果页面:植入的value是Action类中所对应的实体类属性

您所上传的文件是:
文件类型:

页面运行效果:

多个文件上传

只需在上传Action中将原本处理单个文件的操作改成对集合操作即可。

其他的都跟单个上传的一样

页面

/upload
success.jsp

开发实现文件上传的Action

package cn.action;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionSupport;public class SomeUploadAction extends ActionSupport {    //封装上传文件属性        private File[] upload;                //封装上传文件的类型        private String[] uploadContentType;                //封装上传文件名称        private String[] uploadFileName;                //封装文件上传的路径        private String savePath;                        public String execute() throws Exception{            byte[] buffer=new byte[1024];            for (int i = 0; i < upload.length; i++) {                FileInputStream fis=new FileInputStream(getUpload()[i]);                FileOutputStream fos=new FileOutputStream(getSavePath()+"\\"+this.getUploadFileName()[i]);                int length=fis.read(buffer);                while(length>0){                    fos.write(buffer, 0, length);                    length=fis.read(buffer);                }                fos.flush();                fos.close();                fis.close();            }            return SUCCESS;        }        public File[] getUpload() {            return upload;        }        public void setUpload(File[] upload) {            this.upload = upload;        }        public String[] getUploadContentType() {            return uploadContentType;        }        public void setUploadContentType(String[] uploadContentType) {            this.uploadContentType = uploadContentType;        }        public String[] getUploadFileName() {            return uploadFileName;        }        public void setUploadFileName(String[] uploadFileName) {            this.uploadFileName = uploadFileName;        }                public String getSavePath() {            return ServletActionContext.getServletContext().getRealPath(savePath);        }        public void setSavePath(String savePath) {            this.savePath = savePath;        }        }

配置Action

/upload
success.jsp

 

 

文件下载

文件下载需要InputStream,首先在文件下载Action中提供一个获得InputStream的方法,通过输入流可以获取希望下载的文件内容

package cn.action;import java.io.BufferedInputStream;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.InputStream;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionSupport;public class FileDownAction extends ActionSupport {    //读取下载文件的目录        private String inputPath;                //下载文件的文件名        private String fileName;                //读取下载文件的输入流        private InputStream inputStream;                //下载文件的类型        private String conetntType;                                                public String execute(){            return SUCCESS;                    }        public String getInputPath() {            return inputPath;        }        public void setInputPath(String inputPath) {            this.inputPath = inputPath;        }        public String getFileName() {            return fileName;        }        public void setFileName(String fileName) {            this.fileName = fileName;        }        //创建InputStream输入流        public InputStream getInputStream() throws Exception {            String path=ServletActionContext.getServletContext().getRealPath(inputPath);            BufferedInputStream stream = new BufferedInputStream(new FileInputStream(path+"\\"+fileName));            return stream;        }        public void setInputStream(InputStream inputStream) {            this.inputStream = inputStream;        }        public String getConetntType() {            return conetntType;        }        public void setConetntType(String conetntType) {            this.conetntType = conetntType;        }                }

通过Context得到下载文件的实际路径,构建一个InputStream输入流实现文件的下载读取。

在配置文件中,同样对Action进行配置,并对stream结果类型的参数进行设置。

 

/upload
application/octet-stream
inputStream
attachment;filename="${fileName}"
4096

 

 

 

 

转载于:https://www.cnblogs.com/Smile-123/p/5946745.html

你可能感兴趣的文章
不要将时间浪费到编写完美代码上
查看>>
《算法基础:打开算法之门》一3.4 归并排序
查看>>
高德开放平台开放源代码 鼓励开发者创新
查看>>
《高并发Oracle数据库系统的架构与设计》一2.5 索引维护
查看>>
Firefox 是 Pwn2own 2014 上攻陷次数最多的浏览器
查看>>
阿里感悟(十八)- 应届生Review
查看>>
话说模式匹配(5) for表达式中的模式匹配
查看>>
《锋利的SQL(第2版)》——1.7 常用函数
查看>>
jquery中hover()的用法。简单粗暴
查看>>
线程管理(六)等待线程的终结
查看>>
spring boot集成mongodb最简单版
查看>>
DELL EqualLogic PS存储数据恢复全过程整理
查看>>
《Node.js入门经典》一2.3 安装模块
查看>>
《Java 开发从入门到精通》—— 2.5 技术解惑
查看>>
Linux 性能诊断 perf使用指南
查看>>
实操分享:看看小白我如何第一次搭建阿里云windows服务器(Tomcat+Mysql)
查看>>
Sphinx 配置文件说明
查看>>
数据结构实践——顺序表应用
查看>>
python2.7 之centos7 安装 pip, Scrapy
查看>>
机智云开源框架初始化顺序
查看>>