【问题标题】:Angular: Type ArrayBuffer is not assignable to type stringAngular:类型 ArrayBuffer 不可分配给类型字符串
【发布时间】:2020-05-30 22:04:20
【问题描述】:

我正在尝试在将所选图像上传到服务器之前显示它的预览..

html

<div id="drop_zone" (drop)="dropHandler($event)" (dragover)="onDragover($event)">
            <p>drag one or more files to this dropzone</p>
            <img src="" id="imgPreview">
</div>

ts

dropHandler(ev){

    console.log(ev);
    console.log("file dropped");
    event.preventDefault();
    if (ev.files && ev.files[0]) {
      var reader = new FileReader();

      reader.onload = function (e) {
        var abc=<HTMLImageElement>document.getElementById('imgPreview');
        abc.src=e.target.result;
      };

      reader.readAsDataURL(ev.files[0]);
  }

abc.src=e.target.result 似乎返回了一个 ArrayBuffer。如何使用 FileReader 将所选图像的 url 作为字符串获取?

【问题讨论】:

  • 我认为是由于浏览器限制。您无法获取网址。你只能获取数据。否则,如果你使用图片而不是你得到假 URL。
  • @xdeepakv 假网址很好。我只想显示预览
  • 使用字符串连接:检查这里stackoverflow.com/questions/11089732/…
  • 使用您的代码,您肯定应该有一个字符串。你一定有什么东西抄错了。不过请注意,在这种情况下甚至不要使用 FileReader。创建 blobURI dropHandler(ev) { if(ev.files &amp;&amp; ev.files[0]) { document.getElementById('imgPreview').src = URL.createObjectURL(ev.files[0]);} }

标签: javascript angular typescript


【解决方案1】:

我认为你的原则是正确的。当我通过文件上传运行更简单的代码版本时,它可以工作。

https://stackblitz.com/edit/angular-fxa49p

<input type="file" #file (change)="onUpload(file.files[0])" />
<img *ngIf="src" [attr.src]="src" id="imgPreview">
  onUpload(file): void {
    if (!file) {
      return;      
    }

    const reader = new FileReader();
    reader.onload = e => {     
      this.src = <string>e.target.result;
    };
    reader.readAsDataURL(file);
  }

我不得不将 e.target.result 转换为一个字符串以保持 linter 的快乐,但 javascript 很好。

注意,在 Stackblitz 中,drop 功能对我不起作用,因此文件上传。原则上它应该与文件删除相同,因为您最终处理的是File 对象。

【讨论】:

  • 实际上,当使用拖放操作时,会调用服务器而不是使用浏览器中的假路径。它可以通过简单的文件上传正常工作。
  • 什么http服务器?这都是客户端。您可以使用 MDN 文档中的代码从放置事件中获取文件对象。 developer.mozilla.org/en-US/docs/Web/API/HTML_Drag_and_Drop_API/…
  • 当我使用拖放图像时,src 被更改为localhost:4200/undefined 而不是假路径,简单的图像上传工作正常。
  • reader.readAsDataURL(file) 不返回 http URL - 它返回 base64 数据 url。您应该将此数据 url 直接绑定到您的 img src &lt;img [attr.src]="imgData" /&gt; 其中imgData (或任何您称之为的)是base64 URL
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-03-28
  • 1970-01-01
  • 2017-12-28
  • 2019-08-18
  • 2022-06-25
  • 1970-01-01
  • 2021-02-22
相关资源
最近更新 更多