为什么filereader不工作?
我有一个使用socket.io和node.js构build的聊天应用程序。 我有一个函数如下从input读取文件并将其作为base64string发送到服务器。
function readURL() { if (this.files && this.files[0]) { var FR= new FileReader(); FR.onload = function(e) { $("img").attr("src", e.target.result); socket.emit('image', e.target.result); console.log(e.target.result); }; FR.readAsDataURL( this.files[0] ); } };
我的HTML如下:
<input id="file" type='file' onchange="readURL()"/> <img id="img">
然而,在上传文件时,没有任何反应。 没有logging错误,甚至没有logging到控制台。 这是为什么?
如果你显示的代码是全部的,那么这将修复它
你需要从input的onchange
方法传递一个引用,这里使用this
来完成,然后向函数中添加一个参数,这里用el
完成
请注意,因为this
是一个有效的javascript运算符,所以在原始代码片段中不会生成错误。
你可以在这里阅读更多关于this
: JavaScript / Reference / Operators / this
function readURL(el) { if (el.files && el.files[0]) { var FR= new FileReader(); FR.onload = function(e) { $("img").attr("src", e.target.result); socket.emit('image', e.target.result); console.log(e.target.result); }; FR.readAsDataURL( el.files[0] ); } };
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <input id="file" type='file' onchange="readURL(this)"/> <img id="img">
您正在访问错误对象中选定的文件。 如果你有以下的HTML
<input id="file" type='file' onchange="readURL()"/>
然后在“readURL”方法中获取文件对象,试试这个:
var file = (((this.file || {}).files || [])[0]);
@Hundotte ..希望它会帮助你。