一 文件上传

1.环境要求

commons-fileupload-xxx.jar

commons-io-xxx.jar

2.准备jsp页面

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <%@ taglib uri="/struts-tags" prefix="s" %>
  4. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  5. <html>
  6. <head>
  7. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  8. <title>Insert title here</title>
  9. </head>
  10. <body>
  11. <s:form action="Fileupload" method="" enctype="multipart/form-data">
  12. <s:textfield name="title" label="用户名"/><br>
  13. <s:file name="upload" label="上传文件"/><br>
  14. <s:submit name="submit" value="上传" />
  15. </s:form>
  16. </body>
  17. </html>

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <%@ taglib uri="/struts-tags" prefix="s" %>
  4. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  5. <html>
  6. <head>
  7. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  8. <title>Insert title here</title>
  9. </head>
  10. <body>
  11. <s:form action="FileuploadMore" method="post" enctype="multipart/form-data">
  12. <s:textfield name="title" label="用户名"/><br>
  13. <s:file name="upload" label="上传文件"/><br>
  14. <s:file name="upload" label="上传文件"/><br>
  15. <s:file name="upload" label="上传文件"/><br>
  16. <s:file name="upload" label="上传文件"/><br>
  17. <s:submit name="submit" value="上传" />
  18. </s:form>
  19. </body>
  20. </html>

3.Action页面

  1. package com.icss.action.upload;
  2. import java.io.File;
  3. import java.io.FileInputStream;
  4. import java.io.FileOutputStream;
  5. import org.apache.struts2.ServletActionContext;
  6. import com.opensymphony.xwork2.ActionSupport;
  7. /**
  8. ***************************
  9. *@类名 UploadAction.java
  10. public class UploadAction extends ActionSupport{
  11. //1.普通字段name属性名
  12. private String title;
  13. private File upload;//file 控件名 它要和表单name属性和action属性名要一致
  14. //2.控件名+ContentType
  15. private String uploadContentType;//上传文件的类型
  16. //3.控件名+FileName
  17. private String uploadFileName;//上传文件的名称
  18. //4.上传文件的路径 upload
  19. private String savePath; //获取完整的路径
  20. //上传
  21. public String execute() throws Exception {
  22. byte[] buffer = new byte[2048];//缓冲区
  23. //输入流
  24. FileInputStream fis = new FileInputStream(upload);
  25. //输出流 \ \
  26. FileOutputStream fos = new FileOutputStream(getSavePath()+"\\"+uploadFileName);
  27. int len=fis.read(buffer);
  28. while(len>0){
  29. fos.write(buffer, 0, len);
  30. len=fis.read(buffer);
  31. }
  32. fos.flush();
  33. fos.close();
  34. fis.close();
  35. return "success";
  36. }
  37. //生成get和set方法
  38. public String getTitle() {
  39. return title;
  40. }
  41. public void setTitle(String title) {
  42. this.title = title;
  43. }
  44. public File getUpload() {
  45. return upload;
  46. }
  47. public void setUpload(File upload) {
  48. this.upload = upload;
  49. }
  50. public String getUploadContentType() {
  51. return uploadContentType;
  52. }
  53. public void setUploadContentType(String uploadContentType) {
  54. this.uploadContentType = uploadContentType;
  55. }
  56. public String getUploadFileName() {
  57. return uploadFileName;
  58. }
  59. public void setUploadFileName(String uploadFileName) {
  60. this.uploadFileName = uploadFileName;
  61. }
  62. public String getSavePath() {
  63. return ServletActionContext.getServletContext().getRealPath(savePath);
  64. }
  65. public void setSavePath(String savePath) {
  66. this.savePath = savePath;
  67. }
  68. }
  1. public class UploadMoreAction extends ActionSupport{
  2. //file 控件 name 属性和action属性名要一致
  3. //1.普通字段name属性名
  4. private String title;
  5. private File[] upload;
  6. //2.控件名+ContentType
  7. private String[] uploadContentType;//上传文件的类型
  8. //3.控件名+FileName
  9. private String[] uploadFileName;//上传文件的名称
  10. //4.上传文件的路径 upload
  11. private String savePath; //获取完整的路径
  12. //上传
  13. public String execute() throws Exception {
  14. byte[] buffer = new byte[2048];//缓冲区
  15. for(int i=0;i<upload.length;i++){
  16. //输入流
  17. FileInputStream fis = new FileInputStream(upload[i]);
  18. //输出流 \ \
  19. FileOutputStream fos = new FileOutputStream(getSavePath()+"\\"+uploadFileName[i]);
  20. int len=fis.read(buffer);
  21. while(len>0){
  22. fos.write(buffer, 0, len);
  23. len=fis.read(buffer);
  24. }
  25. fos.flush();
  26. fos.close();
  27. fis.close();
  28. }
  29. return "success";
  30. }
  31. public String getTitle() {
  32. return title;
  33. }
  34. public void setTitle(String title) {
  35. this.title = title;
  36. }
  37. public String getSavePath() {
  38. return ServletActionContext.getServletContext().getRealPath(savePath);
  39. }
  40. public void setSavePath(String savePath) {
  41. this.savePath = savePath;
  42. }
  43. public File[] getUpload() {
  44. return upload;
  45. }
  46. public void setUpload(File[] upload) {
  47. this.upload = upload;
  48. }
  49. public String[] getUploadContentType() {
  50. return uploadContentType;
  51. }
  52. public void setUploadContentType(String[] uploadContentType) {
  53. this.uploadContentType = uploadContentType;
  54. }
  55. public String[] getUploadFileName() {
  56. return uploadFileName;
  57. }
  58. public void setUploadFileName(String[] uploadFileName) {
  59. this.uploadFileName = uploadFileName;
  60. }
  1.  

4.配置struts.xml文件

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE struts PUBLIC
  3. "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
  4. "http://struts.apache.org/dtds/struts-2.3.dtd">
  5. <struts>
  6. <constant name="struts.devMode" value="false"/>
  7. <constant name="struts.enable.DynamicMethodInvocation" value="true"/>
  8. <constant name="struts.configuration.xml.reload" value="true"/>
  9. <package name="upload" namespace="/" extends="struts-default">
  10. <!-- 单文件上传 -->
  11. <action name="Fileupload" class="com.icss.action.upload.UploadAction">
  12. <param name="savePath">/upload</param>
  13. <result name="success">/upload_success.jsp</result>
  14. </action>
  15. <!-- 多文件上传配置 -->
  16. <action name="FileuploadMore" class="com.icss.action.upload.UploadMoreAction">
  17. <param name="savePath">/upload</param>
  18. <result name="success">/upload_success.jsp</result>
  19. </action>
  20. <!-- 下载文件 -->
  21. <action name="download" class="com.icss.action.upload.downloadAction">
  22. <param name="inputPath">/upload</param>
  23. <result name="success" type="stream">
  24. <param name="contentType">application/octet-stream</param>
  25. <param name="inputname">inputStream</param>
  26. <param name="contentDisposition">
  27. attachment;filename="${fileName}"
  28. </param>
  29. <param name="bufferSize">4096</param>
  30. </result>
  31. </action>
  32. </package>
  33. </struts>

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

String类型的xxxFileName属性,该属性名称就是前面的File类型属性+FileName组合而成,是固定的语法,作用就是封装File控件对应文件的文件名

String类型的xxxContentType属性,同样也是xxx属性+ContentType组合而成,固定语法,作用就是封装File控件对应文件的文件类型

在Action中设置了这三个属性,在执行上传时就可以直接通过getXxx()方法来获取到上传文件的文件名、类型及文件内容。

而实现文件上传的过程就是使用流实现文件读取的过程,

二 文件下载

jsp:

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  7. <title>Insert title here</title>
  8. </head>
  9. <body>
  10. <a href="download?fileName=head.jpg">下载此图片</a>
  11. </body>
  12. </html>

2.Action

  1. public class downloadAction extends ActionSupport {
  2. //下载路劲
  3. private String inputPath;
  4. //下载文件名
  5. private String fileName;
  6. //读取下载文件的流
  7. private InputStream inputname;
  8. //获取输入流
  9. public InputStream getInputName() throws FileNotFoundException {
  10. String path = ServletActionContext.getServletContext().getRealPath(inputPath);
  11. return new BufferedInputStream(new FileInputStream(path+"\\"+fileName));
  12. }
  13. public String getInputPath() {
  14. return inputPath;
  15. }
  16. public void setInputPath(String inputPath) {
  17. this.inputPath = inputPath;
  18. }
  19. public String getFileName() {
  20. return fileName;
  21. }
  22. public void setFilename(String fileName) {
  23. this.fileName = fileName;
  24. }
  25. public void setInputName(InputStream inputName) {
  26. this.inputname = inputName;
  27. }
  28. public String execute() throws Exception {
  29. return SUCCESS;
  30. }
  31. }

struts.xml在上面。

struts2文件上传(多文件)文件下载的更多相关文章

  1. struts2文件上传,文件类型 allowedTypes

    struts2文件上传,文件类型 allowedTypes 1 '.a' : 'application/octet-stream', 2 '.ai' : 'application/postscript ...

  2. SpringMVC单文件上传、多文件上传、文件列表显示、文件下载(转)

    林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 本文详细讲解了SpringMVC实例单文件上传.多文件上传.文件列表显示.文件下载. 本文工程 ...

  3. SpringMVC文件上传 Excle文件 Poi解析 验证 去重 并批量导入 MYSQL数据库

    SpringMVC文件上传 Excle文件 Poi解析并批量导入 MYSQL数据库  /** * 业务需求说明: * 1 批量导入成员 并且 自主创建账号 * 2 校验数据格式 且 重复导入提示 已被 ...

  4. webAPI文件上传时文件过大404错误的问题

    背景:最近公司有个需求,外网希望自动保存数据到内网,内网有2台服务器可以相互访问,其中一台服务器外网可以访问,于是想在 这台服务器上放个中转的接口.后来做出来以后测试发现没有问题就放线上去了,不顾发现 ...

  5. struts2实现文件上传(多文件上传)及下载

    一.要实现文件上传,需在项目中添加两个jar文件 二.上传准备的页面 注:必须植入enctype="multipart/form-data"属性,以及提交方式要设置成post &l ...

  6. Struts---多文件上传、单文件下载

    struts.xml <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUB ...

  7. Struts2 单个文件上传/多文件上传

    1导入struts2-blank.war所有jar包:\struts-2.3.4\apps\struts2-blank.war 单个文件上传 upload.jsp <s:form action= ...

  8. Struts2文件上传--多文件上传(插件uploadify)

    公司需要把以前的Struts2自带的图片上传替换掉,因为不能一个file选择多个文件,本人直接百度搜索图片插件,  貌似就它(uploadify3.2.1)在最前面,也找过很多案例, 其中有不少问题, ...

  9. [转]SpringMVC单文件上传、多文件上传、文件列表显示、文件下载

    一.新建一个Web工程,导入相关的包 springmvc的包+commons-fileupload.jar+connom-io.jar+commons-logging,jar+jstl.jar+sta ...

  10. Struts2之文件上传(单文件/多文件)

    <一>简述: Struts2的文件上传其实也是通过拦截器来实现的,只是该拦截器定义为默认拦截器了,所以不用自己去手工配置,<interceptor name="fileUp ...

随机推荐

  1. ubuntu自带截图工具

    ubuntu自带的截图工具感觉能够满足基本的截图功能,可以不必安装另外的截图软件. 一般用到的截图类型有三种:全屏.当前活动窗口.自定义区域,其中自定义区域截图是最灵活也是我们用的最多的方式.在ubu ...

  2. Hive中SQL查询转换成MapReduce作业的过程

  3. JS对象 JavaScript 中的所有事物都是对象,如:字符串、数值、数组、函数等,每个对象带有属性和方法。

    什么是对象 JavaScript 中的所有事物都是对象,如:字符串.数值.数组.函数等,每个对象带有属性和方法. 对象的属性:反映该对象某些特定的性质的,如:字符串的长度.图像的长宽等: 对象的方法: ...

  4. JS事件 加载事件(onload)注意:1. 加载页面时,触发onload事件,事件写在<body>标签内。 2. 此节的加载页面,可理解为打开一个新页面时。

    加载事件(onload) 事件会在页面加载完成后,立即发生,同时执行被调用的程序. 注意:1. 加载页面时,触发onload事件,事件写在<body>标签内. 2. 此节的加载页面,可理解 ...

  5. .net 接受请求过来的流

    //接收POST过来的数据 System.IO.Stream s = Request.InputStream; int count = 0; byte[] buffer = new byte[1024 ...

  6. 如何理解 if __name__ == "__main__"

    小明.py 朋友眼中你是小明(__name__ == '小明'), 你自己眼中你是你自己(__name__ == '__main__'), 你编程很好, 朋友调你去帮他写程序(import 小明, 这 ...

  7. 一个切图仔的 JS 笔记

    1,常用数据操作 Math.round(mum,2);num.toFixed(2);两位数 Math.floor(); 返回不大于的最大整数 Math.ceil(); 则是不小于他的最小整数 Math ...

  8. php 引用文件

    require_once :为了避免重复加载文件. 用意:加载文件一次. require_once() 语句在脚本执行期间包括并运行指定文件.此行为和require()语句类似,唯一区别是:如果该文件 ...

  9. Mysql中“select ... for update”排他锁(转)

    原帖地址 https://blog.csdn.net/claram/article/details/54023216 Mysql InnoDB 排他锁 用法: select … for update; ...

  10. springmvc 拦截器不拦截jsp,只拦截控制器的访问

    spring是鼓励把jsp放到WEB-INF文件夹中,然后通过控制器进行访问