我正在尝试将文件上传到我的服务器。但我不确定如何使用 readAsArrayBuffer 来做到这一点。如果我使用 readAsBinaryString 。
,这是有效的如果我尝试使用console.log,它只返回'arrayBuffer:{}'。 在我尝试上传之后,我可以看到内部帖子中只发送了一个空对象。如果我使用readAsBinaryString,我会看到一堆二进制代码。
var file = document.getElementById('my_file').files[0],
reader = new FileReader();
reader.onloadend = function(e){
console.log(e.target.result);
$scope.image = e.target.result;
}
reader.readAsArrayBuffer(file);
如何查看我的文件,所以我知道在使用readAsArrayBuffer时它正在工作? 如果需要更多代码,请告诉我!感谢。
答案 0 :(得分:9)
根据ArrayBuffer文档
您无法直接操作ArrayBuffer的内容;相反,您创建一个类型化数组对象或一个DataView对象,它表示特定格式的缓冲区,并使用它来读取和写入缓冲区的内容。
所以我之前评论过console.log
可能不知道如何表示缓冲区,因此只输出arrayBuffer: {}
。
如果要在控制台中显示某些内容,则需要使用类型化数组或DataView。例如,使用Int8Array
:
reader.onloadend = function (e) {
console.log(e);
console.log(new Int8Array(e.target.result));
};
请参阅demo
答案 1 :(得分:-1)
如果您想上传am图像,则必须将其转换为base64格式。您可以使用canvas元素或使用Filereader来执行此操作。如果您使用的是Filereader,则必须使用readAsDataURL()
您可以参考MDN https://developer.mozilla.org/en-US/docs/Web/API/FileReader.readAsDataURL
你也可以使用canvas元素 Convert an image to canvas that is already loaded