Javascript文件上传,readAsArrayBuffer?
我当前正在尝试将文件上载到我的服务器。但我真的不知道如何使用readAsArrayBuffer来实现这一点。如果我使用readAsBinaryString,则此功能有效 如果我尝试console.log,它只返回'arrayBuffer:{}。 在我尝试上传后,我可以在帖子中看到只发送了一个空对象。如果我使用readAsBinaryString,我会看到一堆二进制代码Javascript文件上传,readAsArrayBuffer?,javascript,filereader,Javascript,Filereader,我当前正在尝试将文件上载到我的服务器。但我真的不知道如何使用readAsArrayBuffer来实现这一点。如果我使用readAsBinaryString,则此功能有效 如果我尝试console.log,它只返回'arrayBuffer:{}。 在我尝试上传后,我可以在帖子中看到只发送了一个空对象。如果我使用readAsBinaryString,我会看到一堆二进制代码 var file = document.getElementById('my_file').files[0], read
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时,如何查看文件,使我知道它正在工作?
如果需要更多的代码,请让我知道!谢谢。如果您想上传am图像,则必须将其转换为base64格式。您可以通过使用canvas元素或使用Filereader来完成。如果您使用Filereader,则必须使用
readAsDataURL()
对此,您可以参考MDN
也可以使用canvas元素
根据文件
不能直接操作ArrayBuffer的内容;相反,您可以创建一个类型化数组对象或以特定格式表示缓冲区的DataView对象,并使用该对象读取和写入缓冲区的内容
因此,正如我之前所评论的,可能console.log
不知道如何表示缓冲区,因此它只输出arrayBuffer:{}
如果要在控制台中显示某些内容,则需要使用类型化数组或数据视图。例如,使用Int8Array
:
reader.onloadend = function (e) {
console.log(e);
console.log(new Int8Array(e.target.result));
};
请参阅尝试记录缓冲区的长度
console.log(e.target.result.bytellength)
。代码可能正在工作,但是ArrayBuffer
的控制台表示形式只是ArrayBuffer:{}
,而不是一堆二进制内容。dreyescat-谢谢,是的,现在我得到了一些输出!谢谢你的回复。是的,我计划使用fileReader。我将有一个带有一些输入字段的表单,包括一个文件输入。然后我想用POST发送表单数据,包括图像。readAsDataURL仍然是一条路吗?是的,为什么不是?readAsDataURL只是将图像转换为base64格式字符串的一种方法。您可以将其存储在变量中,然后以表单发布或存储在数据库中