2014-11-22 95 views
0

確定標題沒有給出太多方法,讓我解釋我非常奇怪的設置。以AJAX響應的二進制形式輸出文件內容

涉及兩個服務器:

  • 網站:遠程
  • 本地主機:本地計算機

的工作流程如下:

  • 該網站呼籲本地主機通過交叉域名AJAX
  • 在迴應localhos噸動態創建通過PHP的ZipArchive LIB的ZIP文件
  • 本地主機傳達包括所述歸檔作爲該請求被作出的響應AJAX

原始數據和歸檔由 - 都好。檔案是可以打開的,都很好。我現在堅持的是如何將檔案傳達爲AJAX響應,以便它可以「再次合併」(àla Humpty Dumpty)。當我這樣做時(通過file_put_contents())它打開時出現錯誤,說它是無效的。目前我只是輸出存檔的原始數據:

echo file_get_contents('path/to/archive.zip'); 

這很好,但在響應中發送亂碼。我不太瞭解編碼和標題,所以如果這看起來很明顯,請道歉。

對於響應,我應該把它轉換爲二進制,還是發送某些標題等?我試着發送multipart/form-data頭,但沒有骰子。標題不是我的強項。

請注意在這種情況下cURL不是,否則我會笑。

+0

該zip壓縮文件是用於下載它的嗎?或顯示它或什麼?沒有理解使用Ajax獲取存檔的目標 – Sn0opr 2014-11-23 00:04:43

+0

目標是無關緊要的 - 這是我發現自己必須與之合作的情況。這個想法是,來自本地主機的AJAX響應被站點接收,然後通過另一個POST AJAX請求轉發到現場的Web服務,以重建爲存檔。從本質上講,這是創建然後通過AJAX傳輸ZIP文件的一種手段。 – Utkanos 2014-11-23 00:06:56

回答

1

你必須閱讀壓縮文件作爲二進制數據與Blob JavaScript類。

這是Mozilla的文檔的代碼片段

var oReq = new XMLHttpRequest(); 
 
oReq.open("GET", "/myfile.png", true); 
 
oReq.responseType = "arraybuffer"; 
 

 
oReq.onload = function(oEvent) { 
 
    var blob = new Blob([oReq.response], {type: "application/octet-stream"}); // 
 
    // you have nothing to do with the blob... 
 
    // ... 
 
}; 
 

 
oReq.send();

那麼這個文件(BLOB)與POST方法發送到你的目的地

var oReq = new XMLHttpRequest(); 
 
oReq.open("POST", url, true); 
 
oReq.onload = function (oEvent) { 
 
    // Uploaded. 
 
}; 
 

 
oReq.send(blob); //the blob that you loaded
可以閱讀Mozi的更多文檔lla: https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Sending_and_Receiving_Binary_Data

+0

謝謝。我現在要深入研究這一點,看看我如何繼續。 – Utkanos 2014-11-23 17:14:09

+0

耶!所有的工作 - 雖然我偶然發現了一點,因爲我沒有意識到以這種方式發送的數據必須通過'file_get_contents('php:// input')'接收,所以我剛剛學到了一些東西。我正在尋找'$ _POST'。非常感謝你的幫助。 – Utkanos 2014-11-23 17:30:39

+0

歡迎您;) – Sn0opr 2014-11-23 17:50:07