2013-08-19 11 views
0

我試圖使用ajax請求通過二進制數據獲取文件,然後將其轉換爲base64。這適用於txt和pdf文件,但在嘗試使用docx時會失敗。響應爲null,並且ResponseText是DOMExpection。如果我直接在chrome中訪問url,它會下載文件fin。 docx文件有什麼特別之處嗎?這是我的代碼。對於Word文檔,Ajax響應爲空,對於txt和pdf很好

function _arrayBufferToBase64(buffer) { 
    var binary = ''; 
    var bytes = new Uint8Array(buffer); 
    var len = bytes.byteLength; 
    for (var i = 0; i < len; i++) { 
     binary += String.fromCharCode(bytes[i]); 
    } 
    return window.btoa(binary); 
} 


function download(fileName, fileDownloadLocation) { 
    var oReq = new XMLHttpRequest(); 
    oReq.onload = function(data) { 
     var base64str = _arrayBufferToBase64(this.response); 
     //Do custom stuff here 
    }; 
    oReq.responseType = "arraybuffer"; 
    oReq.open("get", fileDownloadLocation, true); 
    oReq.send(); 
} 

我也嘗試擰接受頭,但沒有運氣。打開後我打電話給我。

oReq.setRequestHeader('Accept', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document,application/octet-stream,text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'); 
+1

長度您是否嘗試過使用的'onreadystatechange'代替'onload'發生什麼呢?我不認爲'onload'是標準的。 – plalx

+0

是的,我試過使用onreadystatechange,並沒有奏效。 – Nikhil

回答

0

事實證明,這只是文件時都爲0

+0

此問題已關閉?你找到解決方案嗎? – user583726

+0

是的,當文件大小爲0時發生此行爲。我添加了一個檢查。 – Nikhil