实现原理

Struts 2是通过Commons FileUpload文件上传。CommonsFileUpload通过将HTTP的数据保存到临时文件夹,然后Struts使用fileUpload拦 截器将文件绑定到Action的实例中。从而我们就能够以本地文件方式的操作浏览器上传的文件。

fileUpload拦截器必须在defaultStack(默认)拦截器前面配置,Struts2会由上到下执行拦截器。

<!--配置fileUpload的拦截器-->

<interceptor-refname="fileUpload">

<!--配置允许上传的文件类型-->
<paramname="allowedTypes">image/bmp,image/png,image/gif,image/jpeg
</param>
</interceptor-ref>
<interceptor-refname="defaultStack"/>

allowedTypes指定上传的文件类型,但类型不符只会在控制台输出警告语句,程序不会报错。

maximumSize指定上传的单个文件大小,但文件超出大小只会在控制台输出警告语句,程序不会报错。注意不能写成1024*1024*5的形式。

struts.xml里进行以下设置:

<constant name="struts.i18n.encoding" value="GBK"/>国际化资源文件编码

<constant name="struts.multipart.saveDir"  val ="/temp"/>,这句指定了上传文件的临时存放目录

<constant name="struts.multipart.maxSize"  val ="10240000"/>,Struts2的文件上传功能默认最大只能上传2M大小。这句重新指定了上传文件的总大小的最大限制,单位是字节。

//相关部分代码

页面文件中,将表单的提交方式设为POST,然后将enctype设为multipart/form-data

public class FileUploadAction extends ActionSupport
int BUFFER_SIZE = 1024*32;
File imageFile=newFile(ServletActionContext.getServletContext().getRealPath("/UploadImages")+"/"+imageFileName);
copy(myFile, imageFile);//或使用IOUtils.copy(in, out);
try{
   InputStreamin=null;
   OutputStream out=null;
    try{             
       in=newBufferedInputStream(newFileInputStream(src), BUFFER_SIZE);
       out=newBufferedOutputStream(newFileOutputStream(dst), BUFFER_SIZE);
       byte[]buffer=newbyte[BUFFER_SIZE];
       while(in.read(buffer)>0){
          out.write(buffer);
        }
    }finally{
       if(null!=in){
          in.close();
        }
        if(null!=out){
          out.close();
        }
    }
 }catch(Exception e){
   e.printStackTrace();
 }

对应的国际化资源文件
大多数情况下,我们都需要自定义和国际化这些信息。
通过在全局的国际资源文件中加入
“struts.messages.error.content.type.not.allowed=The file you uploaded is not a image” //文件类型
“struts.messages.error.file.too.large= too large " //上传文件的大小
“struts.messages.error.uploading=”//用提示一般的上传出错信息。

allowedExtensionsSet这是设置允许上传文件的后缀,多个类型以逗号“,”隔开,如果某个文件的后缀没在这个设置之类,则会产生一个错 误保存到Action中,错误的i18n的的key为 struts.messages.error.file.extension.not.allowed

FileUpload解析相关推荐

  1. SpringMVC上传文件解析request请求为空获取不到数据问题

    2019独角兽企业重金招聘Python工程师标准>>> 一.原因分析 首先我们来看下Spring mvc 中文件上传的配置 <bean id="multipartRe ...

  2. SpringBoot文件上传源码解析

    一.SpringMVC文件上传源码分析前言(这部分我觉得原作者写的很好) 该如何研究SpringMVC的文件上传的源码呢? 研究源码并不是仅仅知道程序是怎样运行的,而应该从宏观的角度.不同的立场去看待 ...

  3. Spring之配置 multipartResolver 解析器、上传文件、处理文件

    随笔 multipart格式的数据 会将 一个表单拆分为 多个部分,每个部分对应一个输入域.在一般的表单输入域中,它所对应的部分中会放置文本型数据,但是如果上传文件的话,它所对应的部分可以是二进制. ...

  4. commom fileupload简介

    一.概述 Commons FileUpload软件包可以轻松地为您的servlet和Web应用程序添加强大的高性能文件上传功能. FileUpload解析符合RFC 1867"HTML格式的 ...

  5. 尚硅谷最新版JavaWeb全套教程,java web零基础入门完整版(四)

    文件的上传和下载 文件上传的介绍 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns= ...

  6. Spring实战第七章

    一.SpringMVC配置代替方案 1自定DispatcherServlet 按照AbstractAnnotationConfigDispatcherServletInitializer的定义,它会创 ...

  7. spring(7)spring mvc 的高级技术

    [0]README 1)本文部分文字描述转自:"Spring In Action(中/英文版)",旨在review  "spring(7)spring mvc 的高级技术 ...

  8. Spring boot MultipartResolver

    [参考文章]:Required MultipartFile parameter 'file' is not present [参考文章]:Springboot2.0中WebMvcConfigurerA ...

  9. [Study]JavaWeb

    文章目录 一.HTML 1.1 前端开发流程 1.2 HTML 简介 1.3 特殊字符 1.4 font.h.a.img 1.5 ul.ol.table 1.6 iframe 1.7 form 1.8 ...

最新文章

  1. python函数手册68_直接在python中检索68个内置函数?
  2. Google提出新型学习范式「Deep Memory」,或将彻底改变机器学习领域
  3. MaxCompute的任务状态和多任务执行
  4. VC6.0制作OCX并web调用
  5. Android菜鸟如何学习Android系统开发?
  6. 2017.6.3 完全平方数 思考记录
  7. 电脑一族,打电脑时候的健康的坐姿
  8. python抠图_python 网站自动抠图
  9. python123判断字符串结尾_Python学习教程:在字符串的开头和结尾处做文本匹配
  10. C#-求int数组中连续偶数列的个数
  11. 程序员需知的 58 个网站
  12. 华为数通 软开 2022校招 面试全过 已开奖
  13. JavaScript逆向:金某xx网站登陆指纹算法分析
  14. Mac剪贴板复制粘贴内容管理: Paste
  15. vue tinymce安装及使用
  16. Unity 正交相机和透视相机的屏幕适配
  17. STM32, ADS1115
  18. PAT甲级 1031
  19. zotero+坚果云+PDF Expert实现ipad与windows文献阅读同步
  20. 修改植物大战僵尸游戏存档相关知识

热门文章

  1. 电动和液压运动控制比例阀控制器
  2. 硬件描述语言Verilog设计经验总结
  3. 汇编–从数据类型看WORD与DWORD
  4. 第15.33节 PyQt(Python+Qt)入门学习:containers容器类部件QTabWidget选项窗部件简介
  5. 【Go入门】Socks5代理服务器实现 翻译api调用 | 青训营笔记
  6. java API 在线文档
  7. docsify学习笔记
  8. Programming Exercise 7: K-means Clustering and Principal Component Analysis【Maching Learning】
  9. fgn matlab,maching learning NG的matlab作业代码
  10. 怎么把一个页面的数据传到另一个页面?