首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >角2/4 FileReader业务

角2/4 FileReader业务
EN

Stack Overflow用户
提问于 2017-11-01 20:17:14
回答 1查看 3.8K关注 0票数 4

我试图创建的棱角2/4服务,有可能上传文件。我找不到任何资源的解决办法,所以我可能想问你们。所以我们的想法是在组件中有一个带有type=file的输入字段。它有指令(change)="uploadFile($event)“。在组件.ts文件中:

代码语言:javascript
复制
uploadFile(event) {
   this.images.push(this.uploadImgService.uploadImage(event));
}

UploadImgService看起来是这样的:

代码语言:javascript
复制
private img: string;

uploadImage(e) {
  const file = e.target.files[0];
  const pattern = /image-*/;

  if (!file.type.match(pattern)) {
    alert('You are trying to upload not Image. Please choose image.');
    return;
  }
  const reader = new FileReader();
  reader.readAsDataURL(file);
  reader.onloadend = () => {
    this.img = reader.result;
  };

  return this.img;
}

因此,我理解操作正在进行异步,但我不知道如何以等待img加载的方式包装它。我认为这是由于缺乏技能所致:(当我将这些代码发布到组件中时,它肯定可以工作,但我的想法是提供服务。而且,我只是个角质初学者。所以,如果有更好的方法来重新调整这个想法,我很高兴收到你的来信。谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-01 20:28:27

你应该返回这样一个可以观察到的:

代码语言:javascript
复制
uploadImage(e) {
  const file = e.target.files[0];
  const pattern = /image-*/;

  if (!file.type.match(pattern)) {
    alert('You are trying to upload not Image. Please choose image.');
    return;
  }
  const reader = new FileReader();
  reader.readAsDataURL(file);
  return Observable.create(observer => {
    reader.onloadend = () => {
      observer.next(reader.result);
      observer.complete();
    };
  });
}  

在组件中,订阅可观察到的内容:

代码语言:javascript
复制
this.service.uploadImage(event).subscribe((img) => {
    // Do what you want with the image here
});
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47062994

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档