我的问题很简单。我需要将文件直接上传到正确的服务器(当前工作负载较低)。
因此我这样做:
<?php
$server = file_get_contents('http://my-api.com/upload-server.php'); // returns url
?>
然后我打印我的表格
<form method="post" action="<?php echo $server; ?>"...
现在我想将此步骤转移到上传开始时,如下所示:
<form method="post" action="http://my-api.com/upload-gateway.php"...
这个 url 应该重定向到“真实”服务器。
这样上传页面就不会减慢加载速度,并且我有可以缓存、嵌入等的静态 html 代码...
问题是,这对于 get 请求非常有效,但对于 post 请求则不行。
使用位置标头重定向时,该请求似乎会转换为 get 请求。所有发布数据都会丢失。
这是不可能的还是我做错了?是的,我考虑过远程动态 JavaScript,它首先使用正确的服务器打印 html 代码。我宁愿不这样做......
有任何想法吗?也许替代上传技术?
edit:
这是我使用的确切 html 代码:
<form method='post' enctype='multipart/form-data' action='http://storage.ivana.2x.to/rest.php?action=target'>
<input type=hidden name=testfield value="test">
File to upload: <input type=file name=upfile><br>
Notes about the file: <input type=text name=note><br>
<br>
<input type=submit value=Press> to upload the file!
</form>
这是我使用的重定向代码:
if($_GET["action"] == "target") {
header("Location: http://storage.ivana.2x.to/rest.php?action=test");
}
这是我用来查看结果的输出代码:
if($_GET["action"] == "test") {
echo "<pre>";
var_dump($_POST);
var_dump($_GET);
var_dump($_FILES);
}
上传小文件时的结果如下:
array(0) {
}
array(1) {
["action"]=>
string(4) "test"
}
array(0) {
}