文件上传为什么要先转存到一个临时目录
浏览器上传时,先将上传的文件放到临时目录下,然后在从临时目录里面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 ,这个操作是为了用户安全和隐私.
这样理解对不对??
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
0. 用户的输入总是不安全的,不能让用户指定最终保存的目录和文件名,所以首先得找个地方存,然后通过代码代码里指定目标路径和文件名,所以最终总是要有一个move的操作(注意在php里是move_uploaded_file,不是copy)。
1. <删除线>显然这是HTTP服务器的行为</删除线> 显然这是WEB端的行为(更具体地说是具体的语言实现)
2. N/A
3. ----
不一定, PHP是这么设计的, 其他语言可没说一定要这么做
比如python tornado的处理就是在内存中, 其他框架有的会使用一个文件IO接口
1. 不是apache或者nginx服务器行为, 是PHP行为
2. N/A
3. 找资料的话, 就是去了解http POST的协议, 上传文件的那种
表示 express也是这样,你文件上传了后总是要重命名的,这个命名不能由客户端制定,所以在没有进入你程序之前,系统根本不知道该怎么命名这个文件,必然要有一个重命名的过程,这时候放临时文件和放普通文件都一样,最终都要重命名并删除源文件。这种操作明显是临时文件的操作。。。。。
除非,把文件放在内存中。。。这样才不安全类,特别是很大的文件。。。。
临时文件夹对于一些脚本语言来讲会更方便管理。
其实先上传到临时目录是php为了实现Ajax上传:比如用户可以先上传一张图片,在后在编辑框里对图片和文本进行可视化排版。
安全性的原因完全在于你获得$_FILES变量时的检查措施,如果你什么检查都不做,那么不管是放内存还是放硬盘都是不安全的。
附带说一下实现Ajax上传文件有个jQ插件叫jquery.ajaxfileupload :)