【问题标题】:How to get results of File reader如何获得文件阅读器的结果
【发布时间】:2020-01-22 14:21:54
【问题描述】:

所以我的 html 中有一个 onchange 事件,它从用户那里获取图像并需要将其转换为数据 url,以便通过 socket.io 发送并存储在数据库中。如何获得文件阅读器对象的结果。我不知道如何传入回调

我需要做的是在文件阅读器 onload 事件中获取一个回调函数,以便我可以将图片变量设置为数据 url,然后通过套接字发送。只需要帮助从文件阅读器获取结果到我的全局变量 // HTML

<input type = 'file' (change) = "setpreview($event)" value = 'upload photo'>

// js代码。

setpreview(event) {
  var img = <File>event.target.files[0];
  var reader = new FileReader();
  reader.onload = function() {
    console.log(reader.result);
  }

  reader.readAsDataURL(img);
}

【问题讨论】:

  • 那是因为您只是在 setpreview 方法中声明了 reader 变量,如错误所示,该变量不会存在于函数范围之外。
  • 有没有办法让回调函数进入 setpreview 函数?我尝试通过 html 进行操作,但没有成功

标签: javascript angular file reader


【解决方案1】:

您只需将结果分配给作用域变量并在模板中使用它

srcImg = null; //declare this

setpreview(event) {
  const comp = this;
  const img = <File>event.target.files[0];
  const promise = new Promise((resolve) => {
    const reader = new FileReader();
    reader.onload = function () {
      resolve(reader.result);
    }
    reader.readAsDataURL(img);
  });

  promise.then(img => {
    comp.srcImg = img;
    // if you want to do anything with img you can do it here
  });
}
<input type = 'file' (change) = "setpreview($event)" value = 'upload photo'>
<img [src]="srcImg" *ngIf="srcImg" />

更新 Stackblitz:https://stackblitz.com/edit/angular-tkbbdh

【讨论】:

  • 你是绝对的上帝派,不知道你可以有一个变量作为你其他作用域变量的接口。非常感谢!
  • 很高兴它成功了。我添加了一个承诺,以便您可以将其存储在数据库或任何地方,如果您愿意,您可以使用不同的方法提取逻辑,但您可以在 reader.onload 函数中执行您的活动,如果没有,则失去承诺;对你来说意味着什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-21
  • 1970-01-01
  • 1970-01-01
  • 2019-05-25
  • 2011-07-02
  • 2012-04-02
相关资源
最近更新 更多