Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 参数不是“Blob”类型_Javascript_Html_Fileapi - Fatal编程技术网

Javascript 参数不是“Blob”类型

Javascript 参数不是“Blob”类型,javascript,html,fileapi,Javascript,Html,Fileapi,我已经编写了下面的代码来使用文件API显示本地文件中的文本,但是当我单击按钮时,什么也没有发生。在浏览器中检查元素时,出现以下错误。我做错了什么 未捕获的TypeError:未能对“FileReader”执行“readAsText”:参数1不是“Blob”类型 此示例使用addEventListener方法将单击事件附加到按钮 试试看 document.getElementByIdmyBtn.addEventListenerclick,函数{ var file=test.txt var rea

我已经编写了下面的代码来使用文件API显示本地文件中的文本,但是当我单击按钮时,什么也没有发生。在浏览器中检查元素时,出现以下错误。我做错了什么

未捕获的TypeError:未能对“FileReader”执行“readAsText”:参数1不是“Blob”类型

此示例使用addEventListener方法将单击事件附加到按钮

试试看 document.getElementByIdmyBtn.addEventListenerclick,函数{ var file=test.txt var reader=新文件读取器; document.getElementById'file'.innerText=reader.result; reader.readAsTextfile; };
要在innerHtml中保存文件内容,必须首先读取该文件。loadend事件仅在文件完全读取时激发,并且您可以访问其内容而不会出现错误:

var reader = new FileReader();
var fileToRead = document.querySelector('input').files[0];

// attach event, that will be fired, when read is end
reader.addEventListener("loadend", function() {
   // reader.result contains the contents of blob as a typed array
   // we insert content of file in DOM here
   document.getElementById('file').innerText = reader.result;
});

// start reading a loaded file
reader.readAsText(fileToRead);

您可以阅读更多内容,而且您犯了几个错误

错误消息所抱怨的一个问题是,您试图使用硬编码字符串选择文件。无法确定加载了哪个文件。文件API仅允许您读取用户通过文件输入选择的文件

第二种情况是,您试图在读取文件之前读取读取器的result属性。您需要一个事件处理程序来实现这一点,因为像Ajax一样,文件读取是异步的

document.getElementByIdmyBtn.addEventListenerclick,函数{ var reader=新文件读取器; reader.addEventListener'load',函数{ document.getElementById'file'.innerText=this.result; }; reader.readAsTextdocument.querySelector'input'。文件[0]; }; 试试看
正如其他人所说,我注意到onload事件是缺少的

因此,我有两种不同的方法来展示如何让读者做一些事情,一种用于执行readAsText,另一种用于使用readAsDataURL将数据获取为base64字节字符串,在我看来,这样更好,因为您不必担心Unicode和其他奇怪的问号字符。要查看它们的运行情况,只需在上传文件之间翻转侦听器中的调用;并上传文件1;。我还介绍了两种获取文件对象的不同方法:

document.getElementByIdmyBtn.addEventListenerclick,函数{ 上传文件1; }; 函数uploadFile1{ var f=myInput.files[0]; var reader=新文件读取器; reader.onload=processFilef; reader.readAsTextf; } 函数上传文件{ var f=document.querySelector'input'。文件[0]; var reader=新文件读取器; reader.onload=processFilef; reader.readAsDataURLf; } 函数processFiletheFile{ 返回函数{ //使用我在从uploadFile调用时包含的.split var theBytes=e.target.result;//.split'base64',[1]; document.getElementById'file'.innerText=字节; } } 试试看
嗯!其他的不确定,但在我的例子中,它是通过使用fileObjects[0].file解决的


查看它的一个好方法是在控制台中打印“文件”或“文件对象”,然后查看是否最终需要.file。

typeof file==string//truen如果要将其读入变量,该怎么办?我们是否必须明确地将其转储到innerText中?