6
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【Angular】画像のアップロードとPreview表示について

Last updated at Posted at 2019-01-13

Angularでの開発を最近開始したのですが、ファイルアップロードのところでかなり詰まってしまったので、備忘録として残しておきます。

// 1/14追記あり

前提

・Twitterのようなアプリケーションを作成する
・その中に画像のアップロードとその画像の表示を行う

今回のゴール

・画像のアップロード
・アップロード画像の表示

詰まったとこ

・そもそも、アップロードどうやってやるのかわからない

まとめ

・Fileを扱う時にはFile Readerを用いる
・htmlのimgタグの中で表示させるためには、urlの形にする必要がある
・File Readerの中でurlを生成するためには、readAsDataUrlを用いる(これを用いることによって、readerのresultプロパティにurlの文字列が入る)

ソースコード

以下、新たなツイートをする部分のhtmlとtypescript

content-main.component.html
<div class="home-tweet-box tweet-box-component tweet-user">
    <input class="tweet-input" [(ngModel)]="newTweetContents" placeholder="いまどうしてる?">
    <button (click)="setTweetContents(newTweetContents)">ツイート</button>
    <input type='file' accept="image/*" (change)="onChangeInput($event)">
</div>
<img [src]=imageSrc alt="" />
content-main.component.ts
imageSrc = '';
reader = new FileReader();

onChangeInput(evt) {
 const file = evt.target.files[0];
 this.reader.onload = ((e) => {
   this.imageSrc = e.target['result'];
 });
 this.reader.readAsDataURL(file);
}

最終的に参考にしたURL

https://stackoverflow.com/questions/38476315/angular2-file-input-onchange/38476440
https://developer.mozilla.org/ja/docs/Web/API/FileReader
https://developer.mozilla.org/ja/docs/Web/API/FileReader/readAsDataURL

お願い

もし、他にベストプラクティス(普通こうやってやるでしょ)がありましたら知りたいです。

よろしくお願いいたします。

追記

この内容について、NgFormで書き換えることをしました。
https://qiita.com/TakahitoNakashima/items/d1d6fa314d1619f0ce45

6
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?