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

发布于 2022-08-24 12:24:02 字数 608 浏览 12 评论 0

浏览器上传时,先将上传的文件放到临时目录下,然后在从临时目录里面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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

-黛色若梦 2022-08-31 12:24:02

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

表情可笑 2022-08-31 12:24:02

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

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

喵星人汪星人 2022-08-31 12:24:02

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

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

月朦胧 2022-08-31 12:24:02

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

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

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

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

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文