文件上传

  1. 表单准备

    • 要想使用 HTML 表单上传一个或多个文件
    • 须把 HTML 表单的 enctype 属性设置为 multipart/form-data
    • 须把 HTML 表单的method 属性设置为 post
    • 需添加 <input type=“file”> 字段.
  2. Struts 对文件上传的支持
    • 在 Struts 应用程序里, FileUpload 拦截器和 Jakarta Commons FileUpload 组件可以完成文件的上传.
    • 步骤:
      1. 在 Jsp 页面的文件上传表单里使用 file 标签. 如果需要一次上传多个文件, 就必须使用多个 file 标签, 但它们的名字必须是相同的
      2. 在 Action 中新添加 3 个和文件上传相关的属性. 这 3 个属性的名字必须是以下格式
        • 基本的文件的上传: 直接在 Action 中定义如下 3 个属性, 并提供对应的 getter 和 setter
        • [File Name] : 类型-File -被上传的文件。例如:data(fileName要求和文件表单项的name一致
        • [File Name]ContentType : 类型-String -上传文件的文件类型。例如:dataContentType(用来接收文件类型(MIME值)
        • [File Name]FileName : String -上传文件的文件名。例如:dataFileName (用来接收文件的名字
      3. 如果上传多个文件, 可以使用 List
        • 若传递多个文件, 则上述的 3 个属性, 可以改为 List 类型! 多个文件域的 name 属性值需要一致.
  3. 示例代码
<s:form action="testUpload" enctype="multipart/form-data"><s:textfield name="userName[0]" label="用户-1"></s:textfield><s:file name="photos" label="照片"></s:file><s:textfield name="userName[1]" label="用户-2"></s:textfield><s:file name="photos" label="照片"></s:file><s:textfield name="userName[2]" label="用户-3"></s:textfield><s:file name="photos" label="照片"></s:file><s:submit value="提交"></s:submit>
</s:form>
public class UploadAction  extends ActionSupport{@Setter@Getterprivate List<File> photos;@Setter@Getterprivate List<String> photosContentType;@Setter@Getterprivate List<String> photosFileName;@Setter@Getterprivate List<String> userName;public String testUpload() throws IOException {System.out.println("userName: "+userName);System.out.println("photos: "+photos);System.out.println("photosFileName: "+ photosFileName);System.out.println("photosContentType: "+photosContentType);// 将文件传到服务器根目录下upload文件下// 获取ServletContextServletContext servletContext = ServletActionContext.getServletContext();//获取真实路径String realPath = servletContext.getRealPath("/upload");System.out.println(realPath);File uploadFile = new File(realPath);//判断路径是否存在if (!uploadFile.exists()){//不存在创建uploadFile.mkdir();}for (int i = 0; i < photos.size(); i++) {UUID uuid = UUID.randomUUID();FileUtils.copyFile(photos.get(i), new File(realPath + "/" + uuid + photosFileName.get(i)));}return SUCCESS;}
}
  1. 处理几个小问题?

    1. 文件名重名,一般可以在文件名的前面生成一个UUID作为前缀。
    2. 限制单个文件的大小
    3. 限制文件的类型
    4. 限制总文件的大小
  2. 在Struts2 中提供了 FileUpload 拦截器 可以给我们设置这些属性值
    • FileUpload 拦截器有 3 个属性可以设置.

      • maximumSize: 上传单个文件的最大长度(以字节为单位), 默认值为 2 MB
      • allowedTypes: 允许上传文件的类型, 各类型之间以逗号分隔
      • allowedExtensions: 允许上传文件扩展名, 各扩展名之间以逗号分隔
      • 可以在 struts.xml 文件中覆盖这 3 个属性
    • 注意: 在 org.apache.struts2 下的 default.properties 中有对上传的文件总的大小的限制. 可以使用常量的方式来修改该限制struts.multipart.maxSize=2097152
<constant name="struts.devMode" value="true"/><!-- 在这修改总文件的的大小 --><constant name="struts.multipart.maxSize" value="2097152"/><package name="default" namespace="/" extends="struts-default"><interceptors><interceptor-stack name="myInterceptor"><interceptor-ref name="defaultStack"><!-- 修改单个文件大小,Commons FileUpload 组件默认接受上传文件总的最大值为 2M --><param name="fileUpload.maximumSize">57,408</param><!-- 允许上传的文件类型 --><param name="fileUpload.allowedTypes">image/pjpeg,image/gif</param><!-- 允许上传文件的扩展名 --><param name="fileUpload.allowedExtensions">jpg,gif</param></interceptor-ref></interceptor-stack></interceptors><default-interceptor-ref name="myInterceptor"></default-interceptor-ref><action name="testUpload" class="org.pan.action.UploadAction" method="testUpload"><result name="success">/WEB-INF/views/success.jsp</result><result name="input">/upload.jsp</result></action>
</package>
  1. 上传文件相关的错误消息?

    1. 与文件上传有关的出错消息在 struts-messages.properties 文件里预定义.
    2. 可以在文件上传 Action 相对应的资源文件 或者 在 i18n_zh_CN.properties 国际化资源文件中重新定义错误消息
struts.messages.error.file.too.large=你传的文件太大了
struts.messages.error.content.type.not.allowed=文件类型错误
struts.messages.error.file.extension.not.allowed=扩展名错误
struts.messages.upload.error.SizeLimitExceededException=文件总大小超过上限

文件下载

  1. 在某些应用程序里, 可能需要动态地把一个文件发送到用户的浏览器中, 而这个文件的名字和存放位置在编程时是无法预知的

  2. Stream 结果类型
    • Struts 专门为文件下载提供了一种 Stream 结果类型. 在使用一个 Stream 结果时, 不必准备一个 JSP 页面.
    • Stream 结果类型可以设置如下参数:
      • contentType:被下载的文件的 MIME 类型。默认值为 text/plain
      • contentLength:被下载的文件的大小,以字节为单位
      • contentDisposition: 可以设置下载文件名的ContentDispositon 响应头,默认值为 inline,通常设置为如下格式:
        • attachment;filename="document.pdf".
      • inputName:Action 中提供的文件的输入流。默认值为 inputStream
      • bufferSize:文件下载时缓冲区的大小。默认值为 1024
      • allowCaching :文件下载时是否允许使用缓存。默认值为 true
      • contentCharSet:文件下载时的字符编码。
        • 以上参数可以在 Action 中以 getter 方法的方式提供!
    • Stream 结果类型的参数可以在 Action 以属性的方式覆盖
    • 具体使用细节参看 struts-2.3.15.3-all/struts-2.3.15.3/docs/WW/docs/stream-result.html
  3. 示例代码

<a href="testDownLoad">下载</a>
public class DownLoadAction extends ActionSupport{//通常以下这几个参数会在Action 中提供@Setter@Getterprivate String contentType;@Setter@Getterprivate long contentLength;@Setter@Getterprivate String contentDisposition;@Setter@Getterprivate InputStream inputStream;public String testDownLoad() throws FileNotFoundException, UnsupportedEncodingException {//获取ServletContextServletContext servletContext = ServletActionContext.getServletContext();//获取文件的路径String realPath = servletContext.getRealPath("/WEB-INF/file/至少还有你.mp3");//获取文件的流inputStream = new FileInputStream(realPath);//设置文件的类型contentType = servletContext.getMimeType(realPath);//获取文件的长度contentLength = new File(realPath).length();//设置文件名String fileName = "至少还有你.mp3";fileName = new String(fileName.getBytes("gbk"),"iso8859-1");contentDisposition = "attachment;filename="+fileName;return SUCCESS;}
}
<!-- 文件下载 -->
<action name="testDownLoad" class="org.pan.action.DownLoadAction" method="testDownLoad"><result type="stream"><!-- 文件缓冲大小 --><param name="bufferSize">2048</param></result>
</action>

转载于:https://www.cnblogs.com/MPPC/p/6133495.html

11、Struts2 的文件上传和下载相关推荐

  1. Struts2实现文件上传与下载

    Struts包+源码下载地址:点击打开链接   ,打不开,复制后面 http://struts.apache.org/download.cgi#struts223  ,历史版本:http://arch ...

  2. java struts 读取文件,java中Struts2 的文件上传和下载示例

    文件上传 表单准备 要想使用 HTML 表单上传一个或多个文件 须把 HTML 表单的 enctype 属性设置为 multipart/form-data 须把 HTML 表单的method 属性设置 ...

  3. Struts2文件上传与下载

    2019独角兽企业重金招聘Python工程师标准>>> 本文主要写的是struts2 的文件上传与下载(中文文件名问题的解决).  使用的时候直接在地址栏中输入:http://loc ...

  4. Struts2_3_国际化处理_自定义拦截器_文件上传及下载_OGNL

    Struts2国际化处理 浏览器根据当前的语言环境自动查找对应的语言环境资源包, 使jsp显示合适的语言数据环境 Struts2实现国际化, 动作类必须继承ActionSupport 创建资源包 资源 ...

  5. struts2 文件上传与下载 (初始文件上传的底层技术)——struts2第七讲

    2019独角兽企业重金招聘Python工程师标准>>> 文件上传 struts2 注:本文系作者在看了浪曦的风中叶老师的struts2视频的个人总结,希望能帮助广大struts2的初 ...

  6. struts2完美实现文件上传和下载

    ## struts2完美实现文件上传和下载 ## 第一步:在webx项目lib目录下加入struts.jar包 asm-3.3.jar asm-commons-3.3.jar asm-tree-3.3 ...

  7. 十六、Struts2文件上传与下载

    文件上传与下载 1.文件上传前提:<form action="${pageContext.request.contextPath}/*" method="post& ...

  8. Struts2.3.5+Hibernate3+Spring3.1基于注解实现的多文件上传,下载

    Struts2.3.5+Hibernate3+Spring3.1基于注解实现的的多文件上传,下载,这里是上传文件到数据库中,上传控件可以增加和删除,有需要的朋友可以看看. 以下是源码下载地址:http ...

  9. Struts2之实现文件上传与下载

    当我们用struts2进行文件上传时,首先要将from表单的enctype属性进行重新设置.那么该属性的取值就是决定表单数据的编码方式.一般有三个属性取值: application/x-www-for ...

最新文章

  1. Kotlin 一个好用的新功能:Parcelize
  2. 海淀温泉镇迎来大爆发!5G基站、产业转移示范基地、自动驾驶核心测试区.........
  3. 4. 连续时间鞅(REN)
  4. JAVA Spring 事物 ( 已转账为例 ) 基于 AOP 注解
  5. matlab 神经网络设计多层隐含层_数据预测之BP神经网络具体应用以及matlab代码
  6. Windows内存保护机制及绕过方法
  7. 一起来玩AZURE SQL(三)AZURE SQL 数据库迁移
  8. java解析xml文件失败,在Java中解析大型XML文件时找不到文件异常
  9. Windows每月更新补丁离线安装包下载
  10. Linux V4L2驱动框架分析之(一):架构介绍
  11. Spring 实战-第六章-渲染Web视图-6.2创建JSP视图
  12. Java面试题:单核CPU支持多线程吗?
  13. 好心情:22个表达好心情的经典句子,送给抑郁焦虑的你
  14. linux 删除乱码文件名的文件
  15. 计算机毕业设计Java宠物爱心救助系统(源码+系统+mysql数据库+lw文档)
  16. libreCAD源码阅读笔记1
  17. windows 10 移动热点无互联网连接
  18. Matlab最小面积包围四边形
  19. 2021年高处安装、维护、拆除考试报名及高处安装、维护、拆除模拟考试题库
  20. 使用 ES 实现疫情地图或者外卖点餐功能(含代码及数据)

热门文章

  1. java正则表达式双引号_正则表达式中的双引号
  2. 高通 NFC开发基础知识 (未完待续)(目前是主要择录,参考 邓凡平:深入理解Android:WiFi模块 NFC和GPS卷)
  3. .net core获取本机IP地址
  4. 家庭园艺专栏- 植物幼苗徒长等于步入死亡
  5. MySQL数据库技术 第二版 章末 答案—单元8
  6. 弹性体模拟(弹性力学)
  7. 如何在手机浏览器使用调试工具
  8. 在项目如何解除idea和Git的绑定
  9. 关于5+APP或wap2app制作实现JS混淆加密的方法(防止解压直接查看源码)
  10. python计算机二级 常用函数操作