使用POST将文件上传到我的PHP服务器,并将其传递到另一个外部服务器


Uploading a file to my PHP server using a POST and passing it to another external server

我发现了与我想做的类似的帖子,但没有确切的内容,所以如果我错过了,请原谅,这里已经有答案了。此外,我是一名C++工程师,但对PHP很陌生,对网络和HTTP请求没有太多经验。

以下是我希望做的事情。我有一个运行PHP的Linux服务器,它承载了一个供客户端访问的restful API。客户端拥有访问API的自定义身份验证,并且可以使用它上载文件。然后,我需要使用我的私人身份验证凭据将这些文件发送到外部服务器。我可以很容易地设置它,这样当我收到POST时,我会创建一个新的HTTP请求,将其发布到我的私有服务器,然后将结果返回给客户端。

问题在于速度。文件可能很大,这意味着客户端必须等待文件上传两次才能收到回复。我的一个解决方案是立即向客户端发回响应,然后让客户端每隔x秒对服务器进行ping,以检查二次上传的状态。这将使我能够更快地向客户端返回响应,但并不理想。我希望有一个更先进的解决方案,那就是有没有一种方法可以让我在开始接收上传后立即在服务器上开始二次上传,这样当上传到我的服务器时,上传到二次服务器也将几乎完成。这一切也必须通过POST来完成,所以我不知道这是否是等式中的一个限制因素。

这样的事情可能吗?如果是的话,你建议怎么做?

另一种选择可能是以某种方式让客户端直接上传到辅助服务器,但如果不给客户端我的私人身份验证,这怎么可能呢。请记住,辅助服务器只是一个restful API,它接受使用API密钥和令牌进行身份验证的帖子。

这是一个艰难的问题。如果您在辅助服务器上有FTP访问权限,我们最终可以获得更高的速度。

据我所知,你不能在收到文件的同时开始发送二次上传。当文件被上传时,它会驻留在一个临时文件夹中,直到请求完成,然后它才会被移动到某个可访问的文件夹中。但是,嘿,我不是百分之百肯定没有任何可能性。

目前的解决方案对我来说似乎是最好的:获取文件,通知用户,上传到辅助服务器,通知用户是否全部完成。服务器之间的通信通常非常快,因此二次上传所需的时间应该比第一次少。

目前,最后一个选项是否定的。我想不出一种方法可以在不暴露凭据的情况下直接上传到辅助服务器。

谢谢大家。看起来我一直在选择在上传完成后向客户端返回结果,然后启动二次上传,同时让客户端ping主服务器以检查其状态。我认为应该是好的,因为我目前只限于PHP。

干杯