`
Mojarra
  • 浏览: 130765 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

Fastupload 0.5.3发布

阅读更多

相对于以往的版本,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/

分享到:
评论

相关推荐

    BootstrapValidator-0.5.3表单验证

    BootstrapValidator是基于Bootstrap框架的一个强大的表单验证插件,版本0.5.3提供了丰富的功能和自定义选项,使得在Web应用中实现高效且美观的表单验证变得简单易行。这个压缩包包含了该插件的js文件和css样式文件,...

    luyten-0.5.3.rar

    0.5.3版本的发布,意味着它已经经过了多次迭代,优化了用户体验,增强了稳定性。 Luyten的使用非常简单,只需解压下载的"luyten-0.5.3.rar"压缩包,无需安装,双击运行即可。其界面直观,操作流程清晰,用户可以...

    ffmpeg-0.5.3.tar.bz2

    ffmpeg-0.5.3.tar.bz2 ffmpeg是一个功能十分强大的编解码器,支持各种音视频格式。 此为0.5.3版本

    w3m-0.5.3.tar.zip

    标题中的“w3m-0.5.3.tar.zip”是一个软件包的名称,它采用的是常见的压缩格式,其中包含了“tar”和“zip”两种压缩算法。在Linux和Unix环境中,`tar`命令用于打包文件或目录,而`.gz`是gzip压缩格式,用于进一步...

    nmealib-0.5.3.zip

    《NMEA协议解析库nmealib-0.5.3详解》 在现代导航系统中,GPS(全球定位系统)扮演着至关重要的角色。而GPS数据的传输与解析,离不开NMEA(National Marine Electronics Association)协议。NMEA协议是GPS设备与...

    KeePassPPC_V0.5.3 源代码(C++)

    《KeePassPPC_V0.5.3 源代码(C++)》是关于KeePass密码管理软件的一个版本的源代码,专为PPC(Pocket PC)平台设计。KeePass是一款广受欢迎的开源密码管理工具,它允许用户安全地存储各种密码和其他敏感信息。在本文...

    luyten-0.5.3.jar.cab

    luyten-0.5.3.jar

    层次分析法 软件 yaahp V0.5.3

    层次分析法 软件 yaahp V0.5.3 ,实测可用。免费版

    physdiskwrite-0.5.3.zip

    "physdiskwrite-0.5.3.zip" 是一个包含 "physdiskwrite.exe" 的压缩包,这是一款针对img镜像文件的专业写入工具。它主要用于将img格式的磁盘映像文件直接写入到物理硬盘中,以实现对硬盘的完整复制或恢复操作。在...

    bazel-0.5.3-without-jdk-windows-x86_64.zip

    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-...

    yaahp V0.5.3 R1

    利用PSO(微粒群算法/粒子群算法)的判断矩阵计算方法发现一个问题,此方法计算排序权重没问题,但是得到的一致性比例是错误的。yaahp V0.5.3 R1暂时移除此功能。

    ltrace_0.5.3.orig.tar.gz

    在ltrace_0.5.3.orig.tar.gz压缩包中,包含的文件是ltrace-0.5.3,这是一个完整的源代码目录,用于编译和安装ltrace的0.5.3版本。通常,解压后,用户需要按照以下步骤来构建和安装ltrace: 1. 进入解压后的目录:`...

    luyten-0.5.3.zip

    Luyten是一款免费且开源的Java反编译工具,其0.5.3版本的发布提供了方便的用户界面和高效的功能。 Luyten的主要功能包括: 1. **反编译视图**:Luyten能够展示反编译的源代码,允许用户浏览和搜索类、方法和字段。...

    java 反编译 luyten-0.5.3.jar

    java 反编译 luyten-0.5.3.jar

    java反编译工具 luyten-0.5.3

    Luyten是一个强大的Java反编译工具,其0.5.3版本在业界获得了较高的评价,尤其在处理JD-GUI无法反编译的类文件时表现出色。 Luyten的特点与功能: 1. **用户界面友好**:Luyten提供了直观的图形用户界面,使得用户...

    ARP欺骗工具 0.5.3汉化破解版

    ARP欺骗工具 0.5.3汉化破解版,可以将人T出局域网哦!

    文本浏览器w3m-0.5.3.tar.gz

    《深入理解文本浏览器w3m-0.5.3:源代码解析与应用探索》 在数字化时代,虽然图形用户界面的浏览器已经占据了主导地位,但文本模式的浏览器依然有着其独特的应用场景和价值。w3m,作为一款优秀的文本浏览器,以其...

    Video Speed Controller0.5.3_0

    "Video Speed Controller 0.5.3_0" 是一个专为谷歌浏览器设计的扩展程序,主要用于加速或减速在线视频的播放速度。这个工具能够帮助用户根据个人需求调整视频的播放速率,从而提升观看体验,尤其对于学习、研究或者...

    physdiskwrite-0.5.3

    《physdiskwrite-0.5.3:OpenWrt安装中的硬盘写入神器》 在OpenWrt的世界里,physdiskwrite是一款至关重要的工具,它主要用于将OpenWrt的固件镜像直接写入到硬盘或者闪存设备上,从而实现OpenWrt系统的安装和更新。...

    metslib-0.5.3

    metslib 应用于pcl-1.8.1的编译 如果没有可能会报错 metslib 应用于pcl-1.8.1的编译 如果没有可能会报错 metslib 应用于pcl-1.8.1的编译 如果没有可能会报错

Global site tag (gtag.js) - Google Analytics