php - 重定向 POST 请求并保留数据。可能的?

标签 php html http redirect file-upload

我的问题很简单。我需要将文件直接上传到正确的服务器(当前工作负载较低)。

因此我这样做:

<?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"...

此网址应该重定向到“真实”服务器。

这样上传页面就不会减慢加载速度,并且我有可以缓存、嵌入等的静态 html 代码...

问题是,这对 get 请求工作得很好,但对 post 请求则不行。

使用位置 header 进行重定向时,该请求似乎会转换为 get 请求。所有发布数据都会丢失。

这是不可能的还是我做错了?是的,我考虑过远程动态 JavaScript,它首先使用正确的服务器打印 html 代码。我宁愿不这样做......

有什么想法吗?也许有替代上传技术?

编辑:

这是我使用的确切 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) {
}

最佳答案

如果您确实想通过代码实现负载平衡,同时可能使用上传表单缓存页面,请首先选择默认下载服务器(url);然后,onSubmit调用服务器并找到最佳的上传目标并相应地调整action属性。

通过这种方法,不激活JS的用户仍然可以获得他们想要的东西,启用JS的用户可以获得更好的上传目标,并且仍然可以缓存。此外,缓存请求的时机可能更具机会性,因为 URL 请求将在实际上传之前不久发生。

唯一的问题是调用获取 URL,与上面描述的过程相比,您可以更轻松地调整性能(我想)。在我看来,通过 header 指令和/或 cURL 调用上传文件两次对于缓存单个 html 文件来说似乎不是一个好的权衡。但我也不知道你面临的是什么。

如果您不想大量管理服务器环境并引入负载平衡,这是我建议的选项。

另请注意,我并不是一名服务器管理员。

关于php - 重定向 POST 请求并保留数据。可能的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5605432/

相关文章:

php - Silverstripe 扩展 Controller 操作

python - 使用python将xml文件发送到http

php - laravel 表结构显示最喜欢的文章和较少的 View

PHP 和 MySQL 编码

php - 基于 PHP Session 动态加载 CSS,更好的方法?

html - 找不到声明 <body> 宽度的 CSS 规则

swift - 如何使用 Alamofire 上传图片并在参数中引用文件

html - 有关 Ruby 中 HTTP 拦截代理的帮助吗?

php - PHP mb_strtoupper 函数中的土耳其字符错误

javascript - 在 Blogger 帖子中显示 Javascript 和 HTML 的结果