[英]Convert binary file to JavaScript string and then to Uint8Array
[英]Javascript: converting binary data in Uint8Array to string corrupting file
我正在嘗試通過標准jQuery $.ajax
調用將視頻文件分塊上傳到服務器。 過程很簡單:
slice()
方法讀取塊 FileReader.readAsArrayBuffer
讀取生成的Blob Uint8Array
String.fromCharCode.apply(null, intArrayName)
將其轉換為二進制字符串 data
屬性中 當我完成所有塊的上傳后,服務器的API會抱怨文件上傳不完整。 為了測試此方法,我將串聯的二進制字符串轉換為Blob,然后將Chrome保存到我的下載文件夾中,結果發現我的媒體播放器說該文件無法播放。
我已經閱讀了該網站上的帖子和其他文章 , 這些文章建議將整數表示的二進制數據直接轉換為字符串會導致數據丟失,並且建議將其轉換為base64編碼的字符串,因為Javascript沒有像C#一樣的StreamContent對象。
問題是,即使我將Content-Transfer-Encoding
為base64
我也不認為API(不是我們編寫的)會使用它,並且無法告訴您需要base64解碼。
我的問題是:這是通過AJAX調用安全發送視頻數據的唯一可行的方法嗎? 如果沒有,我該如何在我的AJAX請求的數據字段中發送它? 互聯網上可能有成千上萬的這樣的上傳者,但是我找不到任何有關如何執行此操作的可靠文檔。 如果事實證明服務器需要使用base64編碼,那么我們可能必須編寫一個中間人API才能為我們執行此解碼。
多虧了Patrick Evans ,事實證明,我要做的就是上傳Blob本身:
function upload(file) {
var offset = 0; // what's been sent already
var fileSize = file.size;
var chunkSize = 64 * 1024; // bytes
while (offset < fileSize) {
var blob = file.slice(offset, chunkSize + offset);
var urlToUse = ((offset + blob.size) >= fileSize) ? videoFinishBaseUrl : videoContinueBaseUrl;
$.ajax({
url: urlToUse,
method: 'POST',
data: blob,
headers: requestHeaders,
contentType: false,
processData: false,
cache: false,
async: false,
success: function(data) {
jQuery('#uploadmsg').text('Finished offset ' + offset);
offset += blob.size;
},
error: function(err) {
jQuery('#uploadmsg').text(err);
}
});
}
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.