首页 > 文件上传为什么要先转存到一个临时目录

文件上传为什么要先转存到一个临时目录

浏览器上传时,先将上传的文件放到临时目录下,然后在从临时目录里面copy到真正要上传的目录。 为什么不直接读取文件放到所要放置目录?
请问: 1. 这是浏览器有关的行为还是HTTP服务器有关的行为?
2. 浏览器行为的话.是所有浏览器都做这样做吗?这样做出于什么原因?安全?
3. 在哪里能找到相关资料?

--------------------
追加:
http://my.oschina.net/i33/blog/96701
1.首先 这个不是PHP独有的.JAVA struts2框架也作了此处理.应该只是为了方便程序员操作上传文件使用.不然还要像上面文章里说的去操作流. 重命名 大小什么的和这个过程不冲突,是先后的问题.
2.上传文件时 IE 浏览器会获得文件路径全名 如: C:/A.TXT FF 和CHROME 会获得文件名 A.TXT ,这个操作是为了用户安全和隐私.
这样理解对不对??


临时文件夹对于一些脚本语言来讲会更方便管理。

  1. 首先,象PHP这样的语言本身并不适合做大内存的操作,因此上传的文件保存成文件而不是放在内存中对于PHP来讲更适合操作
  2. 另外,你并无法确定用户上传的文件对于服务器端都是有意义的,程序可以只选择它需要文件进行额外的处理或者保存,如果不需要的文件都可以用脚本定时删掉。

不一定, PHP是这么设计的, 其他语言可没说一定要这么做
比如python tornado的处理就是在内存中, 其他框架有的会使用一个文件IO接口

1. 不是apache或者nginx服务器行为, 是PHP行为
2. N/A
3. 找资料的话, 就是去了解http POST的协议, 上传文件的那种


其实先上传到临时目录是php为了实现Ajax上传:比如用户可以先上传一张图片,在后在编辑框里对图片和文本进行可视化排版。

安全性的原因完全在于你获得$_FILES变量时的检查措施,如果你什么检查都不做,那么不管是放内存还是放硬盘都是不安全的。

附带说一下实现Ajax上传文件有个jQ插件叫jquery.ajaxfileupload :)


表示 express也是这样,你文件上传了后总是要重命名的,这个命名不能由客户端制定,所以在没有进入你程序之前,系统根本不知道该怎么命名这个文件,必然要有一个重命名的过程,这时候放临时文件和放普通文件都一样,最终都要重命名并删除源文件。这种操作明显是临时文件的操作。。。。。

除非,把文件放在内存中。。。这样才不安全类,特别是很大的文件。。。。


0. 用户的输入总是不安全的,不能让用户指定最终保存的目录和文件名,所以首先得找个地方存,然后通过代码代码里指定目标路径和文件名,所以最终总是要有一个move的操作(注意在php里是move_uploaded_file,不是copy)。
1. <删除线>显然这是HTTP服务器的行为</删除线> 显然这是WEB端的行为(更具体地说是具体的语言实现)
2. N/A
3. ----

【热门文章】
【热门文章】