javascript - 通过在 Textarea 上拖放加载文本文件
问题描述
我正在尝试添加将文本文件拖放到文本区域的功能。但是,我收到以下错误。
未捕获的 TypeError:无法在“FileReader”上执行“readAsText”:参数 1 不是“Blob”类型。
根据错误线 19 是
reader.readAsText(input.files[0],"UTF-8");
我看到它在说parameter 1 is not of type 'Blob'
;但是,有人可以解释为什么会出现这个错误,我能做些什么来解决这个错误?
function dropfile(input) {
var reader = new FileReader();
reader.onload = function(e) {
notepad.value = e.target.result;
}
reader.readAsText(input.files[0],"UTF-8");
};
notepad.ondrop = function(e) {
this.value = "";
e.preventDefault();
var file = e.dataTransfer.files[0];
dropfile(file);
};
html, body {
height: 100%;
padding: 0;
margin: 0;
}
#notepad {
position: absolute;
top: 0;
left: 0;
bottom: 0;
border: 0;
padding: 1em;
width: calc(100vw - 2em);
resize: none;
}
#notepad:focus {
outline: 0;
}
<textarea id="notepad" placeholder="drag and drop your .txt file"></textarea>
解决方案
您正在将文件传递给dropfile
函数。
var file = e.dataTransfer.files[0];
dropfile(file);
在dropfile
功能上你消费错了。
reader.readAsText(input.files[0],"UTF-8");
您应该将行更改为
reader.readAsText(input,"UTF-8");
试试下面的代码片段。
function dropfile(file) {
var reader = new FileReader();
reader.onload = function(e) {
notepad.value = e.target.result;
};
reader.readAsText(file, "UTF-8");
}
notepad.ondrop = function(e) {
e.preventDefault();
var file = e.dataTransfer.files[0];
dropfile(file);
};
html,
body {
height: 100%;
padding: 0;
margin: 0;
}
#notepad {
position: absolute;
top: 0;
left: 0;
bottom: 0;
border: 0;
padding: 1em;
width: calc(100vw - 2em);
resize: none;
}
#notepad:focus {
outline: 0;
}
<textarea
id="notepad"
placeholder="drag and drop your .txt file"
></textarea>
推荐阅读
- wpf - 根据 wpf 中的值启用/禁用列表视图内的按钮
- python - 为 django 2.1+ 适配 MultiHostMiddleware
- php - PHP 版本 7.2.13 中的文件未移动到文件夹
- c# - 无法将字符串转换为 system.Net.HttpContent
- php - 如何在 PHP 中将特殊时区的当前日期和时间转换为十进制(16,4)
- ms-access - 如何通过(无限)添加按钮在主窗体中制作系列子窗体?
- ruby-on-rails - Ruby OAuth2.0:客户端凭据类型具有不受支持的客户端身份验证方法
- hadoop - Impala : 运行总和 1 小时
- php - 如何在我的数组 codeigniter 中添加翻译到“名称”字段?
- javascript - 如何将标志添加到计数更新角度高位图