`
harrison2010
  • 浏览: 105730 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

大家来讨论:apache下的FileUpload

阅读更多
如果用过apache写的FileUpload的话都知道,使用DiskFileUpload类的时候,需要去建立一个临时的目录。
我追踪过fileupload的源码,一直追踪到commons.io包下面的另一个IOUtils类。
我所了解过程应该是这样的,先将上传的文件放到临时目录下,然受在从临时目录里面copy到真正要上传的目录。

我的疑问是为什么要这么来做,完全可以一次行把要上传的东西传到目的目录不可以吗?
这样做的好处是什么那?

注:相信用过的人都知道,代码我就不贴上来,用代码说明问题总觉得不够理性
分享到:
评论
8 楼 geutopia 2008-11-17  
你把struts.properties不打进jar包不就可以了。直接放置到classes下不就完了。
7 楼 harrison2010 2008-11-17  
littledodo 写道

struts2因为用的也是FileUpload,所以在它的struts.properties里要指定
临时上传目录struts.multipart.saveDir=xxx
而src在打成jar包后就不能去改这个属性了  这样在部署的时候很不方便
不知道大家有什么好的办法可以灵活配置这个目录呢?

既然你要打成jar去部署的话,那么如何去配置当再次修改的时候你都需要去打包。这是必然的,无论是propertyies或者xml的配置文件。
我记得有这样一个方法,其实jar包,可以用rar压缩包格式打开,你仅仅需要修改里面的properties文件就可以了,关闭的时候他会提醒你需要保存到jar吗?你点需要就ok了啊
6 楼 littledodo 2008-11-15  
struts2因为用的也是FileUpload,所以在它的struts.properties里要指定
临时上传目录struts.multipart.saveDir=xxx
而src在打成jar包后就不能去改这个属性了  这样在部署的时候很不方便
不知道大家有什么好的办法可以灵活配置这个目录呢?
5 楼 harrison2010 2008-11-14  
wilsonxu 写道
Apache的FileUpload的处理按文件的大小划分:

2.灵活.在复制到目标地址之前,允许开发者按需去处理临时文件(比如是否覆盖同名文件).


其他观点均赞同,但是这样去判断不可以吧,都已经在在临时目录下了,再去判断重名有意义吗?应该是先去判断重名不重名吧
还有你说按需去处理临时文件,那个东西都被写死在apache upload里面了,如果真的想去处理,必须要改源码的吧
4 楼 wilsonxu 2008-11-14  
Apache的FileUpload的处理按文件的大小划分:
1. 小文件.直接通过内存上传即可.
2. 大文件.先上传到临时文件夹,再复制到目标地址.
3. 太大的文件,不允许上传.

对于#2,用的就是DiskFileItem.我想临时文件有以下几作用:
1.缓存.如果文件上传失败,或被迫中止,临时文件可以缓存已经上传数据.
2.灵活.在复制到目标地址之前,允许开发者按需去处理临时文件(比如是否覆盖同名文件).
3 楼 cyberblue 2008-11-14  
不愿意用临时文件就不要用叫Disk什么什么的那些类了。直接用FileItemStream.openStream(),获取流以后再自己写逻辑处理。
2 楼 harrison2010 2008-11-14  
taopian 写道
如果不设置临时硬盘buffer。
当高并发,并且上传大文件的时候,会造成OutOfMemoryError的。


设置了临时目录不还是会出现这样的情况,临时目录的并发高也不能承受的住吧
1 楼 taopian 2008-11-14  
如果不设置临时硬盘buffer。
当高并发,并且上传大文件的时候,会造成OutOfMemoryError的。

相关推荐

Global site tag (gtag.js) - Google Analytics