- 浏览: 128870 次
- 性别:
文章分类
最新评论
-
seacow2008:
同1楼,深入浅出
Java并发编程(二) CountDownLatch -
Mojarra:
java0000wa 写道不能搞得通俗易懂一点? demo S ...
fastupload 0.6.0发布 -
java0000wa:
不能搞得通俗易懂一点? demo Spring jar包都少了 ...
fastupload 0.6.0发布 -
Mojarra:
tegger 写道不好意思设置字符编码解决了,还是挺好用的,不 ...
fastupload 0.6.0发布 -
tegger:
不好意思设置字符编码解决了,还是挺好用的,不错
fastupload 0.6.0发布
相对于以往的版本,fastupload 0.5.3做出了明显的增强和修改。此版本中,“融合“了磁盘解析方式和内存解析方式,磁盘解析方式也支持非文件类型输入的解析,减少了磁盘解析模式中 UploadChunk对象的创建,提升了解析性能,改进了字符编码转换,API更加简明。
基本API使用
默认情况下,fastupload建议使用内存解析模式,因为这种模式下解析的性能是最好的,而且,解析出的数据是在内存中,很容易处理。其API使用如下,
FastUploadParser fastUploadParser = new FastUploadParser(request); List<MultiPart> list = fastUploadParser.parseList(); for (MultiPart e: list){ if (e.isFile()){ System.out.format("input field name: %s, file name:%s%n", e.getFieldName(), e.getFileName()); e.toFile( /file/ ) ; //write data to a file where you want to place } else { System.out.format("input field name: %s, value:%s%n", e.getFieldName(), e.getString()); } }
但是在某些特定的情况下,比如对内存的使用限制要求强烈的场合,或者上传的文件非常大,可以使用磁盘解析模式,这种模式下,API的使用与内存模式基本相 同,只不过需要创建FileFactory对象,并把这个对象作为FastUploadParser构造函数的第二个参数。
FileFactory fileFactory = FileFactory.getInstance(); fileFactory.setRepository(System.getProperty("user.home")+"/fastupload"); FastUploadParser fastUploadParser = new FastUploadParser(request, fileFactory); List<MultiPart> list = fastUploadParser.parseList(); for (MultiPart e: list){ if (e.isFile()){ System.out.format("input field name: %s, file name:%s%n", e.getFieldName(), e.getFileName()); e.toFile( /target/ ) ; //move temporary file to where you want to place } else { System.out.format("input field name: %s, value:%s%n", e.getFieldName(), e.getString()); } }
在这种模式下,当从multipart/form-data输入流中发现有上传的文件时,会在FileFactory指定的目录内创建一个临时文件,每次 写入不超过8k的数据,此文件的数据分析完后,关闭文件。因此,要使用e.toFile(...) 函数把这个临时文件移至你所想要的地方,对于非文件类型的输入,e.getString()输出其内容。
高级特性
有时候,需要限制客户端上传的文件,不同于其他的文件解析组建,Fastupload采用预先特性匹配机制,在解析过程中,一旦发现头信息与设定的模式不匹配时,会自动跳过此部分。API使用如下
FileFactory fileFactory = FileFactory.getInstance(); fileFactory.setAllowedTypes("image/jpeg"); fileFactory.setAllowedExtensions(".jpg, .png");
当然,文件大小的限制,也是必须要支持的,下面的第一行代码是设定每个文件不超过200000字节,第二行代码是设定multipart输入流的总大小不超过2000000字节,注意,这里的总数是包含一些HTML的代码在内的
fileFactory.setThreshold(200000); fileFactory.setMaxContentLength(2000000);
如果想知道解析的进度,可以创建一个ProgressListener对象
ProgressListener listener = new ProgressListener(fastUploadParser); listener.progress();
字符编码
java语言本身是支持unicode的,并且,在各种unicode之间进行转换是很容易 的,但是比较杯具的是,在Servlet规范中,没有规定检测传输的数据所采用的编码方法,在服端编程时,没有调用 ServletRequest.setCharsetEncoding(...) 函数时,ServletRequest.getCharsetEncoding(...) 函数永远返回null,在程序里,很难知道客户端发送过来的数据流是采用以什么字符集进行编码的。不仅如此,即使知道了数据流编码所采用的字符集,可能和 运行着的Servlet容器所使用的字符集不一样,可能和操作系统所使用的字符集也不一样,因此对数据流进行适当的字符集转换,并按照Servlet容器 所使用的字符保存到文件系统,对于防范由字符编码引起的问题。
在unicode环境中,首先要告诉ServletRequest,客户端发 送数据时编码所采用的字符集,給FileFactory设置目标字符集,如果不想显式初始化带有编码的FileFactory对象,可以在启动JVM时加 上 -Dfile.encoding="UTF-8"参数,FileFactory会取这个默认的字符集。
request.setCharsetEncoding(“gbk"); FileFactory fileFactory = FileFactory.getInstance("utf-8"); // ... 以下省略解析代码
对于磁盘解析方式,正确的设定了ServletRequest编码字符集和目标字符集后,文本文件可以进行正确的转码。有一点需要注意的是,即使是文本文 件,浏览器按照二进制流的形式把其内容“灌入”到HTTP流中,当对其文件名却按照浏览器当前的字符集进行编码,假如文本文件保存的时候,编码是gbk, 用浏览器上传文件时选用了utf8,这样,fastupload就不能正确的进行转码工作。因此在磁盘解析模式下,有必要让浏览器采用和操作系统同样的编 码。
而对于内存解析方式,API使用者代码可以直接访问到二进制的流,可以随心所欲的进行编码转换工作。
1, MultiPart part ...; 2, part.getString(); 3, part.getString("gbk");
这个代码片段中,第二行是对解析到的流按照系统默认的字符集转换成String,第三行是按照指定的字符集对字节流进行编码,转换成String。
Maven依赖坐标
<
dependency
>
<
groupId
>net.sf.fastupload</
groupId
>
<
artifactId
>fastupload-core</
artifactId
>
<
version
>0.5.3</
version
>
</
dependency
>
@仪山湖
项目地址:https://sourceforge.net/projects/fastupload/
项目wiki: https://sourceforge.net/p/fastupload/wiki/Fastupload%20Home/
发表评论
-
Fastupload 0.6.1 发布
2014-03-03 09:44 15210.6.1版本主要修复了JQuery-form提交ajax请 ... -
fastupload 0.6.0发布
2013-06-23 18:24 1716Fastupload 0.6.0完善或者新增加的功能有: ... -
uProfiler使用指南
2013-06-13 14:43 1501简介: uProfiler Community是面向主题 ... -
uProfiler Community 1.0发布
2013-06-08 09:39 1947uProfiler Community 1.0是面 ... -
fastupload-springmvc 0.5.5发布
2013-04-15 21:55 1951fastupload-springmvc是利用f ... -
fastupload已发布至maven中心库
2012-11-29 09:44 988为了让大家更方便的使用fastupload开源项目,fastu ... -
白话MVC(五)初窥Spring MVC
2012-11-22 21:17 2157在 为 struts2 项 目写完 fastuplo ... -
Fastupload 0.4.7发布,支持struts2
2012-10-28 20:56 1722Fastupload 0.4.7这个版本中主要增加了支持str ... -
白话MVC(四)为Struts2编写文件上传插件
2012-10-28 20:47 3119Struts2中,在Dispatcher.java ... -
Fastupload 0.4.2发布
2012-10-19 12:05 1500更新:fastupload 0.4.2支 ... -
fastupload召集开源开发志愿者
2012-10-11 19:57 98fastupload开源项目自发布0.3.5版本后,文件上传的 ... -
白话MVC(三)Struts2拦截器巧妙装配Model Bean
2012-10-12 18:02 1980白话MVC(二) 在Struts的过滤器中,经过调用Prep ... -
白话MVC(二)Struts2中Model的处理基础-ActionContext
2012-10-09 13:17 2395白话MVC(一) ... -
白话MVC(一)Model的产生及处理
2012-09-29 00:36 34545白话MVC(二) 最近在带一“徒弟”,领悟能力很高,对我 ... -
fastupload API开发快速上手
2012-09-01 16:36 2820fastupload提供两种从multipart/form-d ... -
文件上传的秘密(五)0.31版本功能基本完备
2012-08-26 21:15 1342fastupload 0.31版本上周已经发布,因为工作的关系 ... -
fastupload 0.3.1发布
2012-08-21 15:25 1686fastupload根据RFC 1867文档 ... -
开源项目fastupload 0.2.3发布
2012-07-06 17:19 1935fastupload 0.2.3发布,增加了对sub-boun ... -
文件上传的秘密(四)大小限制与进度
2012-05-28 14:27 8352RFC1867规范中,对表单上传文件的大小和进度都没有作出规定 ... -
文件上传的秘密(三)性能和稳定性上的衡量
2012-05-19 22:42 2871文件上传的秘密系列之一, http://mojarra.ite ...
相关推荐
ffmpeg-0.5.3.tar.bz2 ffmpeg是一个功能十分强大的编解码器,支持各种音视频格式。 此为0.5.3版本
luyten-0.5.3.rar 反编译工具,解压即用,方便快捷,说要50个字!我在说一遍!luyten-0.5.3.rar 反编译工具,解压即用,方便快捷
Video Speed Controller0.5.3_0谷歌页面加速
luyten-0.5.3.jar
BootstrapValidator-0.5.3源码实例表单验证所需的js文件与css样式
bazel-0.5.3-without-jdk-windows-x86_64.zipbazel-0.5.3-without-jdk-windows-x86_64.zipbazel-0.5.3-without-jdk-windows-x86_64.zipbazel-0.5.3-without-jdk-windows-x86_64.zipbazel-0.5.3-without-jdk-windows-...
java 反编译 luyten-0.5.3.jar
层次分析法 软件 yaahp V0.5.3 ,实测可用。免费版
文本浏览器源代码,比较好用的文本浏览器 w3m 0.5.3
ARP欺骗工具 0.5.3汉化破解版,可以将人T出局域网哦!
一款专为img打造的写入磁盘工具,可以把一个镜像文件按照文件原本的顺序写入物理硬盘,软件需要在DOS命令符下使用。
rpmforge -release-0.5.3-1.el5.rf.x86_64.rpm
metslib 应用于pcl-1.8.1的编译 如果没有可能会报错 metslib 应用于pcl-1.8.1的编译 如果没有可能会报错 metslib 应用于pcl-1.8.1的编译 如果没有可能会报错
密码保存软件KeePass的源代码C++)
install-companionjs-v0.5.3 install-companionjs-v0.5.3 install-companionjs-v0.5.3
lynx的替代品,完美解决LYNX乱码的问题.
python_snappy-0.5.3-cp34-cp34m-win_amd64
python-firewall-0.5.3-5.el7.noarch.rpm
roundcubemail-0.5.3
离线安装包,亲测可用