使用Javascript将我服务器上的远程文件上传到第三方服务器

using Javascript to upload a remote file on my server to a 3rd party server

本文关键字:服务器 文件 第三方 Javascript 使用 程文件      更新时间:2023-09-26

我使用PHP在我的服务器上创建一个图像文件。现在我需要通过POST上传到第三方服务器。最简单的是使用服务器端cURL脚本来完成,但我必须通过我的客户端来完成,因为它需要在客户端和第三方服务器之间的活动会话上下文中上传。问题是我怎样才能最容易地做到这一点?

  1. 是否可以使用HTML表单或AJAX调用,并通过给它的URL上传图像?问题是第三方后端不接受url,它需要被表示为好像它是通过web表单上传的…

  2. 如果这是不可能的,我正在考虑使用AJAX调用来下载图像并将内容保存到一个变量。然后创建一个上传图像内容的表单,就像在表单中选择了一个本地文件一样。我该怎么做呢?

当我通过web表单上传文件并查看正在发送的HTTP标头时,我看到如下内容:

------WebKitFormBoundary3ygta7rqeBm1krBO
Content-Disposition: form-data; name="MAX_FILE_SIZE"
10000000
------WebKitFormBoundary3ygta7rqeBm1krBO
Content-Disposition: form-data; name="uploadedfile"; filename="test.jpg"
Content-Type: image/jpeg

------WebKitFormBoundary3ygta7rqeBm1krBO--

我应该创建一个类似于这种格式的字符串,然后通过AJAX调用作为数据提交吗?我把实际的二值图像数据放在哪里?我猜是Chrome开发者工具屏蔽了这些数据……

我认为最简单的似乎是你说的,通过你的服务器上传到第三方。是否有办法通过PHP脚本从用户会话中获取任何内容?

否则,你可以尝试发送回客户端(也许通过AJAX)在一些编码格式的图像,如base64,在你的服务器已经生成它,然后构建一个自定义的XHR发送文件给第三方…下面是一个示例:

var boundary = this.generateBoundary();
var xhr = new XMLHttpRequest;
xhr.open("POST", this.form.action, true);
xhr.onreadystatechange = function() {
    if (xhr.readyState === 4) {
        alert(xhr.responseText);
    }
};
var contentType = "multipart/form-data; boundary=" + boundary;
xhr.setRequestHeader("Content-Type", contentType);
for (var header in this.headers) {
    xhr.setRequestHeader(header, headers[header]);
}
// here's our data variable that we talked about earlier
var data = this.buildMessage(this.elements, boundary);
// finally send the request as binary data
xhr.sendAsBinary(data);

在这里查看更多信息(在"XMLHttpRequest对象"部分下面):
http://igstan.ro/posts/2009-01-11-ajax-file-upload-with-pure-javascript.html