浏览 3782 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-11-14
我追踪过fileupload的源码,一直追踪到commons.io包下面的另一个IOUtils类。 我所了解过程应该是这样的,先将上传的文件放到临时目录下,然受在从临时目录里面copy到真正要上传的目录。 我的疑问是为什么要这么来做,完全可以一次行把要上传的东西传到目的目录不可以吗? 这样做的好处是什么那? 注:相信用过的人都知道,代码我就不贴上来,用代码说明问题总觉得不够理性 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-11-14
如果不设置临时硬盘buffer。
当高并发,并且上传大文件的时候,会造成OutOfMemoryError的。 |
|
返回顶楼 | |
发表时间:2008-11-14
taopian 写道 如果不设置临时硬盘buffer。
当高并发,并且上传大文件的时候,会造成OutOfMemoryError的。 设置了临时目录不还是会出现这样的情况,临时目录的并发高也不能承受的住吧 |
|
返回顶楼 | |
发表时间:2008-11-14
最后修改:2008-11-14
不愿意用临时文件就不要用叫Disk什么什么的那些类了。直接用FileItemStream.openStream(),获取流以后再自己写逻辑处理。
|
|
返回顶楼 | |
发表时间:2008-11-14
Apache的FileUpload的处理按文件的大小划分:
1. 小文件.直接通过内存上传即可. 2. 大文件.先上传到临时文件夹,再复制到目标地址. 3. 太大的文件,不允许上传. 对于#2,用的就是DiskFileItem.我想临时文件有以下几作用: 1.缓存.如果文件上传失败,或被迫中止,临时文件可以缓存已经上传数据. 2.灵活.在复制到目标地址之前,允许开发者按需去处理临时文件(比如是否覆盖同名文件). |
|
返回顶楼 | |
发表时间:2008-11-14
最后修改:2008-11-14
wilsonxu 写道 Apache的FileUpload的处理按文件的大小划分:
2.灵活.在复制到目标地址之前,允许开发者按需去处理临时文件(比如是否覆盖同名文件). 其他观点均赞同,但是这样去判断不可以吧,都已经在在临时目录下了,再去判断重名有意义吗?应该是先去判断重名不重名吧 还有你说按需去处理临时文件,那个东西都被写死在apache upload里面了,如果真的想去处理,必须要改源码的吧 |
|
返回顶楼 | |
发表时间:2008-11-15
struts2因为用的也是FileUpload,所以在它的struts.properties里要指定
临时上传目录struts.multipart.saveDir=xxx 而src在打成jar包后就不能去改这个属性了 这样在部署的时候很不方便 不知道大家有什么好的办法可以灵活配置这个目录呢? |
|
返回顶楼 | |
发表时间:2008-11-17
littledodo 写道 struts2因为用的也是FileUpload,所以在它的struts.properties里要指定 临时上传目录struts.multipart.saveDir=xxx 而src在打成jar包后就不能去改这个属性了 这样在部署的时候很不方便 不知道大家有什么好的办法可以灵活配置这个目录呢? 既然你要打成jar去部署的话,那么如何去配置当再次修改的时候你都需要去打包。这是必然的,无论是propertyies或者xml的配置文件。 我记得有这样一个方法,其实jar包,可以用rar压缩包格式打开,你仅仅需要修改里面的properties文件就可以了,关闭的时候他会提醒你需要保存到jar吗?你点需要就ok了啊 |
|
返回顶楼 | |
发表时间:2008-11-17
你把struts.properties不打进jar包不就可以了。直接放置到classes下不就完了。
|
|
返回顶楼 | |