- 浏览: 130765 次
- 性别:
文章分类
最新评论
-
seacow2008:
同1楼,深入浅出
Java并发编程(二) CountDownLatch -
Mojarra:
<div class="quote_title ...
fastupload 0.6.0发布 -
java0000wa:
不能搞得通俗易懂一点? demo Spring jar包都少了 ...
fastupload 0.6.0发布 -
Mojarra:
<div class="quote_title ...
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 15590.6.1版本主要修复了JQuery-form提交ajax请 ... -
fastupload 0.6.0发布
2013-06-23 18:24 1770Fastupload 0.6.0完善或者新增加的功能有: ... -
uProfiler使用指南
2013-06-13 14:43 1551简介: uProfiler Community是面向主题 ... -
uProfiler Community 1.0发布
2013-06-08 09:39 1985uProfiler Community 1.0是面 ... -
fastupload-springmvc 0.5.5发布
2013-04-15 21:55 1999fastupload-springmvc是利用f ... -
fastupload已发布至maven中心库
2012-11-29 09:44 1026为了让大家更方便的使用fastupload开源项目,fastu ... -
白话MVC(五)初窥Spring MVC
2012-11-22 21:17 2244在 为 struts2 项 目写完 fastuplo ... -
Fastupload 0.4.7发布,支持struts2
2012-10-28 20:56 1755Fastupload 0.4.7这个版本中主要增加了支持str ... -
白话MVC(四)为Struts2编写文件上传插件
2012-10-28 20:47 3157Struts2中,在Dispatcher.java ... -
Fastupload 0.4.2发布
2012-10-19 12:05 1541更新:fastupload 0.4.2支 ... -
fastupload召集开源开发志愿者
2012-10-11 19:57 98fastupload开源项目自发布0.3.5版本后,文件上传的 ... -
白话MVC(三)Struts2拦截器巧妙装配Model Bean
2012-10-12 18:02 2029白话MVC(二) 在Struts的过滤器中,经过调用Prep ... -
白话MVC(二)Struts2中Model的处理基础-ActionContext
2012-10-09 13:17 2433白话MVC(一) ... -
白话MVC(一)Model的产生及处理
2012-09-29 00:36 34642白话MVC(二) 最近在带一“徒弟”,领悟能力很高,对我 ... -
fastupload API开发快速上手
2012-09-01 16:36 2880fastupload提供两种从multipart/form-d ... -
文件上传的秘密(五)0.31版本功能基本完备
2012-08-26 21:15 1391fastupload 0.31版本上周已经发布,因为工作的关系 ... -
fastupload 0.3.1发布
2012-08-21 15:25 1723fastupload根据RFC 1867文档 ... -
开源项目fastupload 0.2.3发布
2012-07-06 17:19 1996fastupload 0.2.3发布,增加了对sub-boun ... -
文件上传的秘密(四)大小限制与进度
2012-05-28 14:27 8403RFC1867规范中,对表单上传文件的大小和进度都没有作出规定 ... -
文件上传的秘密(三)性能和稳定性上的衡量
2012-05-19 22:42 2919文件上传的秘密系列之一, http://mojarra.ite ...
相关推荐
BootstrapValidator是基于Bootstrap框架的一个强大的表单验证插件,版本0.5.3提供了丰富的功能和自定义选项,使得在Web应用中实现高效且美观的表单验证变得简单易行。这个压缩包包含了该插件的js文件和css样式文件,...
0.5.3版本的发布,意味着它已经经过了多次迭代,优化了用户体验,增强了稳定性。 Luyten的使用非常简单,只需解压下载的"luyten-0.5.3.rar"压缩包,无需安装,双击运行即可。其界面直观,操作流程清晰,用户可以...
ffmpeg-0.5.3.tar.bz2 ffmpeg是一个功能十分强大的编解码器,支持各种音视频格式。 此为0.5.3版本
标题中的“w3m-0.5.3.tar.zip”是一个软件包的名称,它采用的是常见的压缩格式,其中包含了“tar”和“zip”两种压缩算法。在Linux和Unix环境中,`tar`命令用于打包文件或目录,而`.gz`是gzip压缩格式,用于进一步...
《NMEA协议解析库nmealib-0.5.3详解》 在现代导航系统中,GPS(全球定位系统)扮演着至关重要的角色。而GPS数据的传输与解析,离不开NMEA(National Marine Electronics Association)协议。NMEA协议是GPS设备与...
《KeePassPPC_V0.5.3 源代码(C++)》是关于KeePass密码管理软件的一个版本的源代码,专为PPC(Pocket PC)平台设计。KeePass是一款广受欢迎的开源密码管理工具,它允许用户安全地存储各种密码和其他敏感信息。在本文...
luyten-0.5.3.jar
层次分析法 软件 yaahp V0.5.3 ,实测可用。免费版
"physdiskwrite-0.5.3.zip" 是一个包含 "physdiskwrite.exe" 的压缩包,这是一款针对img镜像文件的专业写入工具。它主要用于将img格式的磁盘映像文件直接写入到物理硬盘中,以实现对硬盘的完整复制或恢复操作。在...
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-...
利用PSO(微粒群算法/粒子群算法)的判断矩阵计算方法发现一个问题,此方法计算排序权重没问题,但是得到的一致性比例是错误的。yaahp V0.5.3 R1暂时移除此功能。
在ltrace_0.5.3.orig.tar.gz压缩包中,包含的文件是ltrace-0.5.3,这是一个完整的源代码目录,用于编译和安装ltrace的0.5.3版本。通常,解压后,用户需要按照以下步骤来构建和安装ltrace: 1. 进入解压后的目录:`...
Luyten是一款免费且开源的Java反编译工具,其0.5.3版本的发布提供了方便的用户界面和高效的功能。 Luyten的主要功能包括: 1. **反编译视图**:Luyten能够展示反编译的源代码,允许用户浏览和搜索类、方法和字段。...
java 反编译 luyten-0.5.3.jar
Luyten是一个强大的Java反编译工具,其0.5.3版本在业界获得了较高的评价,尤其在处理JD-GUI无法反编译的类文件时表现出色。 Luyten的特点与功能: 1. **用户界面友好**:Luyten提供了直观的图形用户界面,使得用户...
ARP欺骗工具 0.5.3汉化破解版,可以将人T出局域网哦!
《深入理解文本浏览器w3m-0.5.3:源代码解析与应用探索》 在数字化时代,虽然图形用户界面的浏览器已经占据了主导地位,但文本模式的浏览器依然有着其独特的应用场景和价值。w3m,作为一款优秀的文本浏览器,以其...
"Video Speed Controller 0.5.3_0" 是一个专为谷歌浏览器设计的扩展程序,主要用于加速或减速在线视频的播放速度。这个工具能够帮助用户根据个人需求调整视频的播放速率,从而提升观看体验,尤其对于学习、研究或者...
《physdiskwrite-0.5.3:OpenWrt安装中的硬盘写入神器》 在OpenWrt的世界里,physdiskwrite是一款至关重要的工具,它主要用于将OpenWrt的固件镜像直接写入到硬盘或者闪存设备上,从而实现OpenWrt系统的安装和更新。...
metslib 应用于pcl-1.8.1的编译 如果没有可能会报错 metslib 应用于pcl-1.8.1的编译 如果没有可能会报错 metslib 应用于pcl-1.8.1的编译 如果没有可能会报错