Javascript文件上传,readAsArrayBuffer?

Javascript文件上传,readAsArrayBuffer?,javascript,filereader,Javascript,Filereader,我当前正在尝试将文件上载到我的服务器。但我真的不知道如何使用readAsArrayBuffer来实现这一点。如果我使用readAsBinaryString,则此功能有效 如果我尝试console.log,它只返回'arrayBuffer:{}。 在我尝试上传后,我可以在帖子中看到只发送了一个空对象。如果我使用readAsBinaryString,我会看到一堆二进制代码 var file = document.getElementById('my_file').files[0], read

我当前正在尝试将文件上载到我的服务器。但我真的不知道如何使用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时,如何查看文件,使我知道它正在工作?
如果需要更多的代码,请让我知道!谢谢。

如果您想上传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格式字符串的一种方法。您可以将其存储在变量中,然后以表单发布或存储在数据库中