AngularJS:将ArrayBuffer中的二进制数据PUT到服务器

joe*_*erx 14 javascript angularjs

好的,所以我尝试读取这样的PDF文件:

reader.readAsArrayBuffer(file);
Run Code Online (Sandbox Code Playgroud)

然后尝试使用以下方式将其发送到服务器$http:

$http.put(url, data, {headers: {'Content-Type': 'application/pdf'}});
Run Code Online (Sandbox Code Playgroud)

因此,只需以原始形式读取并将二进制文件发送到服务器.据一些资源,我发现,传递一个ArrayBuffer以XHR 工作,但将它作为数据$http只是导致的请求body是这样的:{}Content-Length=2

读取文件会readAsBinaryString()导致文件损坏(由于这个原因,显然已弃用)

用例对我来说似乎微不足道,我错过了什么?

Chrome 36,Angular 1.2.20

小智 30

你必须reader.readAsArrayBuffer(file);onload回调中使用然后ArrayBufferView从结果中创建一个:

new Uint8Array(reader.result)
Run Code Online (Sandbox Code Playgroud)

将该数据传递给$http并覆盖该transformRequest属性,以便angularjs不会将您的数组编码为json:

reader.onload = function() {
    $http({
        method: 'PUT', 
        headers: {'Content-Type': 'application/pdf'}, 
        data: new Uint8Array(reader.result), 
        transformRequest: []
    })
};
reader.readAsArrayBuffer(file);
Run Code Online (Sandbox Code Playgroud)

  • 是只有AngularJS将所有内容编码为json的标准行为?我不明白为什么人们会将字节数组编码为json数据. (3认同)
  • @tbaetz:我用它敲了近两天...谢谢你的回答. (3认同)