文件上传java web 开发中文件上传方法研究与实现

上传文件  时间:2021-02-09  阅读:()

精品文档可编辑 值得下载

Java Web开发中文件上传方法研究与实现

摘要文件上传是Web开发中经常需要实现的功能介绍了 Java Web开发中主流的文件上传方法包括SmartUpload和Commons Fi leUpload两种组件上传以及Servlet3.0支持的原生API文件上传。给出了三种方法实现文件上传的主要代码并对三者在上传大文件时的效率进行了比较。

关键词SmartUpload Commons Fi leUpload Servlet

3.0 文件上传 Java Web

中图分类号 TP31 1 文献标识码A文章编号1009-30442016 1 1-0048-02

在Web应用开发中文件上传是经常需要实现的功能目前广为流传的方法是使用第三方的文件上传组件。具体在Java web开发领域常用的上传组件有SmartUpload、Apache Commons Fi leUpload等。在最新的Servlet 3.0规范中对文件上传提供了API的原生支持这样就可以不再依赖任何第三方上传组件。本文将举例探讨以上三种文件上传方法的特点最后从上传效率上给出三种方法的比较。

1 SmartUpload组件

SmartUpload是在Java Web开发中使用较多的一个文

1/6

精品文档可编辑 值得下载

件上传下载组件它的特点是使用非常简单只需几行代码即可实现文件的上传下载所以即使SmartUpload已经停止了更新但直到今天依然是很多开发者的选择。

SmartUpload的API中主要包括SmartUpload、 Fi les、Fi le、 Request等核心类。 由于篇幅限制本文就不再列出各个类的方法了读者可自行上网查阅。下面举例说明该组件的使用方法。

1  编写文件上传表单文件

文件上传表单使用属性值为fi le的input标记注意表单必须以post方式提交表单的 enctype属性必须是multipart/form-data。该文件在三种文件上传方法中都需要用到。

2 编写JSP文件实现文件上传

首先需要将下载的SmartUpload组件jar包拷贝至Web应用的WEB-INF l ib 目录下然后编写实现文件上传功能的JSP文件。文件上传核心代码如下

注意不同浏览器的默认设置不同 IE浏览器默认提交文件的整个路径可以在Internet安全设置更改为不包含本地路径 而火狐或谷歌浏览器默认只提交文件名所以需要考虑可能包含路径的情况把文件名从中提取出来。Commons Fi leUpload组件自身没有提供限制上传文件类型的方法需要自行编码从文件名取出扩展名并与允许上传的

2/6

精品文档可编辑 值得下载

文件扩展名进行比较然后给出用户相应的错误提示。除了使用Fi leItem的write  方法保存文件外还可以通过Fi leItem的getInputStream 方法获取文件输入流然后再通过输出流保存至文件甚至是数据库。在上传文件时如果超出 了文件大小限制  系统会抛出异常Fi leSizeLimitExceedException  此 异 常 是Fi leUploadException异常的子类所以可以捕获该异常并在异常处理代码中给出用户错误提示。

3 Servlet 3.0文件上传

上述两种文件上传方法都需要用到第三方组件而在最新的Servlet3.0规范中提供了对文件上传的原生支持直接使用Servlet3.0提供的API就能够轻松实现文件上传。较之Servlet2.5主要是增加了两个类MultipartConfig和Part。其中MultipartConfig是注解类要想让Servlet支持文件上传只需在其前面添加如下形式注解即可

@MultipartConfig maxFi leSize=1024*1024*300  //设置单个文件最大上传大小如300M

另外HttpServletRequest类还增加了一个getParts  方法该方法可以获取表单提交过来的所有上传文件这些文件信息封装在一个个的Part对象中。 Part类提供了write方法用于保存上传的文件。在Servlet的doPost  方法编写如下代码

3/6

精品文档可编辑 值得下载for Part part  request.getParts  {//遍历所有上传的文件

String fi lename=getFi lenamepart   //自定义方法从请求头信息中得到文件名

Fi le savePath = request.getServletContext  .getRealPath “upload  ” +fi lename part.writesavePath   //保存上传的文件到指定的路径

}

因为Servlet 3.0没有提供直接获取文件名的方法所以只能自行编写方法getFi lename 从请求头中解析文件名。以火狐浏览器为例若是IE则文件名带路径 请求头格式为

Content-Disposition  form-data  name=“fi leName” fi lename=“test.avi”。 getFi lename 方法代码如下private String getFi lenamePart part  {

String contentDisp = part.getHeader ”content-disposition”  

String[] tokens=contentDisp.spl it  ”  ”  for String token  tokens  {if  token.trim .startsWith ”fi lename”   { Stringfi lename = token.substring  token. indexOf  ”=“  + 2 token. length   -1  

4/6

精品文档可编辑 值得下载return fi lename.substring fi lename. lastIndexOf ”   ” +1   //兼容所有浏览器

}

}return““ 

}

如果上传文件违法大小限制在获取P a rt对象时将抛出I l legalStateException异常所以可以将以上for循环代码置入try-catch结构中通过捕获I l legalStateException异常来判断文件是否超出大小限制。对于上传文件后缀的限制方法与Commons Fi leUpload组件一样也是在得到的文件名中提取扩展名再与允许上传的文件扩展名比较即可。

4运行测试

分别运行以上三种文件上传程序当上传体积较小文件时三者在资源利用率及响应时间方面差别不太显著但当增加上传文件大小时例如上传300M左右的视频文件经测试使用SmartUpload组件、 Commons Fi leUpload组件、Servlet 3.0 API上传文件花费的平均时间分别为6.642s、

5.174s、 4.750s。从资源占用情况来看Servlet 3.0 API文件上传也是最节约系统资源的方法。

5结论

本文分析对比了目前Java Web开发中三种常见的文件

5/6

精品文档可编辑 值得下载

上传方法前两种方法需要借助第三方组件来实现其中SmartUpload组件代码简单实现方便但目前已停止更新并且在上传大文件时效率不高而Commons Fi leUpload组件目前依然在更新维护中上传大文件时有不错的性能并且也被很多主流框架所使用。最后一种文件上传方法使用Servlet3.0自身的API来实现不再依赖第三方组件上传效率比Commons Fi leUpload也更为高效所以如果JavaWeb项目是基于Java EE 6以上版本开发的建议考虑使用Servlet 3.0 API的文件上传方法。

参考文献

[1]张书锋.基于Java语言的文件上传组件研究[J].电脑知识与技术 201333 .

[2]刘杨. JSP项目开发常用文件上传组件比较及举例[J].电脑编程技巧及维护 20158 .

[3]周兵.基于JSP文件上传中的问题探讨及改进方案[J].兰州工业学院学报 20154 .

6/6

妮妮云36元,美国VPS洛杉矶 8核 8G 36元/月,香港葵湾 8核 8G

妮妮云的来历妮妮云是 789 陈总 张总 三方共同投资建立的网站 本着“良心 便宜 稳定”的初衷 为小白用户避免被坑妮妮云的市场定位妮妮云主要代理市场稳定速度的云服务器产品,避免新手购买云服务器的时候众多商家不知道如何选择,妮妮云就帮你选择好了产品,无需承担购买风险,不用担心出现被跑路 被诈骗的情况。妮妮云的售后保证妮妮云退款 通过于合作商的友好协商,云服务器提供2天内全额退款,超过2天不退款 物...

[黑五]ProfitServer新加坡/德国/荷兰/西班牙VPS五折,不限流量KVM月付2.88美元起

ProfitServer已开启了黑色星期五的促销活动,一直到本月底,商家新加坡、荷兰、德国和西班牙机房VPS直接5折,无码直购最低每月2.88美元起,不限制流量,提供IPv4+IPv6。这是一家始于2003年的俄罗斯主机商,提供虚拟主机、VPS、独立服务器、SSL证书、域名等产品,可选数据中心包括俄罗斯、法国、荷兰、美国、新加坡、拉脱维亚、捷克、保加利亚等多个国家和地区。我们随便以一个数据中心为例...

青云互联-洛杉矶CN2弹性云限时五折,9.5元/月起,三网CN2gia回程,可选Windows,可自定义配置

官方网站:点击访问青云互联官网优惠码:五折优惠码:5LHbEhaS (一次性五折,可月付、季付、半年付、年付)活动方案:的套餐分为大带宽限流和小带宽不限流两种套餐,全部为KVM虚拟架构,而且配置都可以弹性设置1、洛杉矶cera机房三网回程cn2gia 洛杉矶cera机房                ...

上传文件为你推荐
photoimpact教程PhotoImpact 7 中文版解压程序下RAR那个解压软件yy频道中心YY怎么进入频道中心吴晓波频道买粉五大知识付费平台有哪些?镜像文件是什么镜像文件是什么意思?商标注册查询官网怎么查商标有没有注册网站推广外链网站推广,免费的超级外链有用吗?seo还应该做什么网站排名靠前怎样才能做好一个网站?让网站排名靠前?新手求解怎么在图片上写文字如何在图片上写字?熊猫直播频道在熊猫TV上的直播能不能回看?如果能,怎么才能回看?
qq域名邮箱 长春域名注册 动态ip的vps 美国主机排名 inmotionhosting 腾讯云数据库 域名优惠码 gomezpeer 国内加速器 中国智能物流骨干网 河南移动邮件系统 php空间推荐 老左正传 爱奇艺vip免费试用7天 中国电信测速网 爱奇艺vip免费领取 t云 无限流量 512mb 服务器维护 更多