[Vue]フロントエンド機能のみでダウンロードを実装する[JS]

[Vue]フロントエンド機能のみでダウンロードを実装する[JS]

2021-09-305 min read

目次

  1. 概要
  2. 実装
  3. 参考サイト

概要

フロントエンドのみ(=サーバサイドがダウンロードさせない) でダウンロードを行う機能を実装した時のメモです。

Vueを利用して実装していますが、ここで記載しているコードはVueに依存した機能ではなく、ピュアなJSのAPIをコールしているものです。

実装

ポイント

Blobオブジェクトを利用するところがポイントとなります。

ダウンロードのイベントが実行された際、download属性を付与したaタグの要素を動的に作成します。

このaタグ要素にはダウンロードさせたいBlobオブジェクトを設定しておきます。

そして、この要素のクリックイベントを発火させることでダウンロードさせます。

ソース

<div id="app">
  <h2>ダウンロードのデモ</h2>
  <textarea v-model="text"></textarea>
  <br>
  <button v-on:click="download">download</button>
</div>
new Vue({
  el: "#app",
  data: {
    text: '',
    csvData: [
    	['col1', 'col2', 'col3'],
    	['a', 'b', 'c'],
    	['aa', 'bb', 'cc'],
    ]
  },
  methods: {
  	download: function() {
      let blob = new Blob([this.text], {type : 'text/plain'});
      let blobURL = window.URL.createObjectURL(blob);
      let obj = document.createElement('a');
      obj.href = blobURL;
      obj.download = `202109091200.csv`
      document.body.appendChild(obj);
      obj.click();
      obj.parentNode.removeChild(obj);
    }
  },
  created() {
  	this.text = this.csvData.map(e1 => e1.join(",")).join("\n")
  }
})

デモ

参考サイト

Blob - Web API | MDN

Tags
javascript(103)
linux(54)
amazon%20aws(47)
node.js(43)
%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0(36)
typescript(33)
%E7%94%BB%E5%83%8F%E5%87%A6%E7%90%86(30)
html5(29)
php(24)
centos(24)
python(22)
%E7%AB%B6%E6%8A%80%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0(21)
mac(21)
mysql(19)
canvas(18)
opencv(17)
%E9%9B%91%E8%AB%87(16)
docker(16)
wordpress(15)
atcoder(14)
apache(12)
%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92(12)
%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9(12)
amazon%20s3(12)
red%20hat(12)
ubuntu(11)
github(10)
git(10)
vue.js(10)
%E7%94%BB%E5%83%8F%E5%87%A6%E7%90%86100%E6%9C%AC%E3%83%8E%E3%83%83%E3%82%AF(10)
mariadb(10)
aws%20cdk(9)
css3(8)
%E5%8F%AF%E8%A6%96%E5%8C%96(8)
%E5%B0%8F%E3%83%8D%E3%82%BF(8)
amazon%20lightsail(7)
react(7)
%E3%83%96%E3%83%AD%E3%82%B0(6)
cms(6)
oracle(6)
perl(6)
gitlab(6)
next.js(6)
prisma(6)
iam(5)
amazon%20ec2(5)
%E8%B3%87%E6%A0%BC%E8%A9%A6%E9%A8%93(5)
aws%20amplify(5)
nestjs(5)
curl(4)
Author
githubzennqiita
ただの備忘録です。※このブログの内容は個人の見解であり、所属する組織等の見解ではないです。