gpt4 book ai didi

php - 可以将文件从客户端的机器上传到托管表单的网络服务器外部的服务器吗?

转载 作者:搜寻专家 更新时间:2023-10-31 21:42:31 24 4
gpt4 key购买 nike

要设置场景,需要三台机器:(1) 客户端机器,(2) 网络服务器,(3) 和文件存储服务器。这三台机器不在同一个局域网内,也不在同一个域内。网络服务器运行带 PHP 的 Apache,存储服务器也运行带 PHP 的 IIS7。

我有一个网页——托管在网络服务器上——包含一个文件上传模块。当用户从该网页上传文件时,我希望将文件直接存储到存储服务器上,而不是 Web 服务器本身。我想避免通过 cURL 或系统级命令(如“scp”)将文件从网络服务器传输到存储服务器,因为这似乎是在浪费网络资源和用户时间。

这是否可以安全地进行,推荐的实现方式是什么?

我确实找到了 a nice, multi-file uploader on GitHub by blueimp那可以做cross-domain uploads , 但在按照设置跨域上传的说明进行操作后,我从浏览器的调试控制台收到一条错误消息:

XMLHttpRequest cannot load http://storageserver.com/scripts/process_uploads.php. Origin http://webserver.com is not allowed by Access-Control-Allow-Origin.

虽然我意识到这不是最安全的代码,但我将以下内容添加到 process_uploads.php 脚本以进行故障排除:

header('Access-Control-Allow-Origin: *');

为了清楚起见,这里是我编写由 jQuery-File-Upload 插件解析的表单元素的方式:

<form id="fileupload" action="http://storageserver.com:8080/scripts/process_uploads.php" method="POST" enctype="multipart/form-data">

有没有人成功实现跨域文件上传?如果是这样,您能否阐明什么可能是可靠的解决方案。

最佳答案

我建议您获得一台时间机器,可以回到几年前网络还是一个更值得信赖的地方,而浏览器无法防范此类事情的时候。无论如何,跨域规则似乎每隔几个月就会更改一次。如果可以的话,你最好避免这种蠕虫病毒。

我看到两个选项,都不是很好。无疑还有更多。

首先:将表单提交到您的文件服务器,然后让它将表单提交到您的网络服务器。

这取决于(当然在很大程度上)两台服务器之间的可靠连接。您说您不想将文件从 Web 服务器复制到文件管理器。因此,请以其他方式移动您的数据。与从另一个方向复制文件相比,几个字节的格式会更小。因此,将整个表单提交到您的文件服务器,并让一个 PHP 表单处理程序将非文件部分(包括源 IP 和 session 标识符)提交到 Web 服务器。您甚至不需要在文件管理器上存储表单数据,只需让它将 Web 服务器的结果中继回浏览器即可。设计时不要忘记考虑身份验证和安全性。

第二种:使用JavaScript或Flash上​​传两个表单

将您的非文件表单内容放在一个表单中,将文件放在一个单独的表单中。捕获一个表单的提交并让它也提交另一个表单(到另一个服务器)。这是一个糟糕的解决方案,因为它依赖于浏览器上的 JavaScript,而浏览器并不总是存在。 (你可以通过要求它来破坏你的网站,但我不推荐它。)因为你已经在使用 jQuery,你可能可以自己想出一个解决方案。

我不知道您如何在 Flash 中执行此操作,但我相信这是可能的。而且我同样确信您不应该在 Flash 中这样做。关注所有闭源“网络”技术。始终使用开放工具。

这就是我的全部。但我是系统管理员。我很想看看其他人的想法。

关于php - 可以将文件从客户端的机器上传到托管表单的网络服务器外部的服务器吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8967688/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com