【Struts2】4.文件上传与下载
来源:互联网 发布:mac视频和音频不同步 编辑:程序博客网 时间:2024/06/10 18:05
进行文件上传时,必须将表单的method属性设为post,将enctype属性设为multipart/form-data。 Struts2在进行文件上传操作时,实际上是通过两个步骤实现的: 1) 首先将客户端上传的文件保存到struts.multipart.saveDir键所指定的目录中,如果该键所对应的目录不存在,那么就保存到javax.servlet.context.tempdir环境变量所指定的目录中。 2) Action中所定义的File类型的成员变量file实际上指向的是临时目录中的临时文件,然后在服务器端通过IO的方式将临时文件写入到指定的服务器端目录中。
方式二:
Servlet实现
通过FileUploadInterceptor拦截器实现
public class UploadServlet extends HttpServlet{@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException{ //磁盘文件工厂DiskFileItemFactory factory = new DiskFileItemFactory();//文件保存路径String path = req.getRealPath("/upload"); //设置属性,目录,用于临时存储的文件目录factory.setRepository(new File(path)); //设置存储磁盘的最小值,超出该值直接存在磁盘,小于在内存中factory.setSizeThreshold(1024 * 1024); //新建一个文件上传ServletFileUpload upload = new ServletFileUpload(factory);try{ //获取到页面传递的列表List<FileItem> list = (List<FileItem>)upload.parseRequest(req);for(FileItem item : list){String name = item.getFieldName();//判断该项是文本单元还是文件域,若为文本单元if(item.isFormField()){String value = item.getString();System.out.println(name + "=" + value);req.setAttribute(name, value);}else//为文件{//获取文件名称(不同浏览器不同,有些包含路径)String value = item.getName();int start = value.lastIndexOf("\\");String fileName = value.substring(start + 1);req.setAttribute(name, fileName);//该行等价于下面的实现item.write(new File(path, fileName));////OutputStream os = new FileOutputStream(new File(path, fileName));////InputStream is = item.getInputStream();////byte[] buffer = new byte[400];////int length = 0;////while((length = is.read(buffer)) != -1)//{//os.write(buffer, 0, length);//}////is.close();//os.close();}}}catch(Exception ex){ex.printStackTrace();}req.getRequestDispatcher("fileUploadResult.jsp").forward(req, resp);}}struts2实现方式
public class UploadAction extends ActionSupport{private String username;private File file;private String fileFileName;private String fileContentType;public String getUsername(){return username;}public void setUsername(String username){this.username = username;}public File getFile(){return file;}public void setFile(File file){this.file = file;}public String getFileFileName(){return fileFileName;}public void setFileFileName(String fileFileName){this.fileFileName = fileFileName;}public String getFileContentType(){return fileContentType;}public void setFileContentType(String fileContentType){this.fileContentType = fileContentType;}@Overridepublic String execute() throws Exception{String root = ServletActionContext.getRequest().getRealPath("/upload");InputStream is = n ew FileInputStream(file);System.out.println("path: " + file.getAbsolutePath());System.out.println("file: " + file.getName());System.out.println("fileFileName: " + fileFileName);File destFile = new File(root, fileFileName);OutputStream os = new FileOutputStream(destFile);byte[] buffer = new byte[400];int length = 0;while(-1 != (length = is.read(buffer))){os.write(buffer, 0, length);Thread.sleep(1000);}is.close();os.close();return SUCCESS;}}
下载
方式一:
public class DownloadAction extends ActionSupport{public InputStream getDownloadFile(){return ServletActionContext.getServletContext().getResourceAsStream("/upload/comments.txt");}@Overridepublic String execute() throws Exception{return SUCCESS;}}对应的struts.xml配置
<action name="downloadFile" class="com.shengsiyuan.struts2.DownloadAction"><result type="stream"><param name="contentDisposition">attachment;filename="文件名"</param><param name="inputName">downloadFile</param></result></action>
方式二:
public class DownloadAction2 extends ActionSupport{private int number;private String filename;public String getFilename(){return filename;}public void setFilename(String filename){this.filename = filename;}public int getNumber(){return number;}public void setNumber(int number){this.number = number;}public InputStream getDownloadFile(){try{if (1 == number){this.filename = "中文圣思园文件下载.txt";//若为中文,会出现乱码的问题 this.filename = new String(this.filename.getBytes("gbk"),"8859_1");return ServletActionContext.getServletContext().getResourceAsStream("/upload/中文圣思园文件下载.txt");}else{this.filename = "CaptureSprite.exe";return ServletActionContext.getServletContext().getResourceAsStream("/upload/CaptureSprite.exe");}}catch (Exception ex){}return null;}@Overridepublic String execute() throws Exception{return SUCCESS;}}对应的配置
<action name="downloadFile2" class="com.shengsiyuan.struts2.DownloadAction2"><result type="stream"><param name="contentDisposition">attachment;filename=${filename}</param><param name="inputName">downloadFile</param></result></action>
注:此文档为学习圣思园风中叶教程结合自身学习所记录。
阅读全文
0 0
- 【Struts2】4.文件上传与下载
- Struts2文件上传与下载
- Struts2文件上传与下载
- Struts2文件上传与下载
- Struts2文件上传与下载
- Struts2 文件上传与下载
- struts2文件上传与下载
- Struts2文件上传与下载
- Struts2文件上传与下载
- Struts2文件上传与下载
- Struts2-文件上传与下载
- struts2文件上传与下载
- Struts2文件上传与下载
- struts2文件上传与下载
- struts2文件上传与下载
- Struts2上传与下载文件
- Struts2文件上传与下载
- Struts2--文件上传与下载
- 【改】 html5 中tab页面的简单转换
- 适用于 Azure 虚拟网络的常见 PowerShell 命令
- 顺序表基本算法的是实现
- 原码, 反码, 补码 详解
- VMware网络详解 桥接 主机 NAT模式
- 【Struts2】4.文件上传与下载
- 文章标题
- DateUtils 日期工具类
- [学习笔记]MySQL基础使用
- 机器学习算法
- 软件测试学习笔记_软件测试的分类
- ServletContext作用功能详解
- HTML中,不固定宽高的元素在DIV中水平并且垂直居中
- 接口测试总结(下)