2011-09-07 87 views
5

我正在使用PHP在我的服務器上創建映像文件。現在我需要通過POST將其上傳到第三方的服務器。最簡單的方法是使用服務器端cURL腳本來完成,但我必須通過我的客戶端來完成,因爲它需要在客戶端和第三方服務器之間的活動會話上下文中上傳。問題是我該如何實現這個最簡單的?使用Javascript將我的服務器上的遠程文件上傳到第三方服務器

  1. 是否可以使用說一個HTML表單或AJAX調用並通過給它的URL上傳圖像?問題是,第三方後端不接受網址,它需要表現爲好像它是通過網絡形式上傳...

  2. 如果這是不可能的,我想使用AJAX調用下載圖像並將內容保存到變量。然後創建一個表單,上傳圖像的內容,就像在表單中選擇了本地文件一樣。我應該怎麼做到這一點?

當我通過網絡的形式上傳文件,並期待在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開發者工具會壓制這些數據...

感謝您的任何指示。

回答

1

我覺得最簡單的似乎是你說的,通過你的服務器上傳到第三方。有沒有辦法讓你通過PHP腳本從用戶的會話中獲取任何內容?

否則,您可以嘗試在服務器生成後以某種編碼格式(如base64)向客戶端(可能通過AJAX)發送圖像,然後構建自定義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

相關問題