JavaScriptでファイルを作成してダウンロードする
PHPなどのサーバーサイドでファイルの作成処理を行わず、クライアントのJavaScriptだけでファイルを作成してそのファイルをダウンロードする方法をご紹介します。
以前のJavaScriptでは不可能でしたが、HTML5の登場によりJavaScriptでも可能となりました。
ファイルの作成
次のボタンを押すとJavaScriptでファイルを作成して、そのファイルをダウンロードする事が出来ます。
サンプルコード
JavaScriptでファイルを作成してダウンロードするサンプルコードです。
<!DOCTYPE html>
<head>
<meta charset="UTF-8">
<body>
<script type="text/javascript">
function AsciiToUint8Array(S) {
var len = S.length;
var P = new Uint8Array(len);
for (var i = 0; i < len; i++) {
P[i] = S[i].charCodeAt(0);
}
return P;
}
function SaveToFile(FileName,Stream) {
if (window.navigator.msSaveBlob) {
window.navigator.msSaveBlob(new Blob([Stream.subarray(0, Stream.length)], { type: "text/plain" }), FileName);
} else {
var a = document.createElement("a");
a.href = URL.createObjectURL(new Blob([Stream.subarray(0, Stream.length)], { type: "text/plain" }));
//a.target = '_blank';
a.download = FileName;
document.body.appendChild(a) // FireFox specification
a.click();
document.body.removeChild(a) // FireFox specification
}
}
function run(){
var Stream = new Uint8Array(AsciiToUint8Array('http://www.petitmonte.com/'));
SaveToFile('test.txt',Stream);
}
</script>
</head>
<button onclick="run();">ファイルの作成</button>
</body>
</html>
31行目のUint8Array型のコンストラクタとAsciiToUint8Array()でファイルのバイナリデータを作成します。
32行目のSaveToFile()でファイルをダウンロードします。
AsciiToUint8Array()関数はアスキー文字をUint8Arrayに変換しています。※英数字と記号のみ対応です。
SaveToFile()関数はブラウザがIE、Edgeの場合とそれ以外(Chrome、FireFoxなど)の場合でダウンロード手法が異なります。
動作確認
Edge、IE11、Chrome、FireFoxの最新版で確認しています。
日本語対応版 - 2016/5/23追記
日本語に対応するにはコードを次のように変更します。
function SaveToFile(FileName,Stream) {
if (window.navigator.msSaveBlob) {
window.navigator.msSaveBlob(new Blob([Stream], { type: "text/plain" }), FileName);
} else {
var a = document.createElement("a");
a.href = URL.createObjectURL(new Blob([Stream], { type: "text/plain" }));
//a.target = '_blank';
a.download = FileName;
document.body.appendChild(a) // FireFox specification
a.click();
document.body.removeChild(a) // FireFox specification
}
}
function run(){
var Stream = 'あいうえお';
SaveToFile('test.txt',Stream);
}
こちらのコードの方がシンプルで良いですね。
関連サイト
プチラボ
http://www.petitmonte.com/labo/
JavaScriptでPDFやエクセル、ワードなどのOfficeファイル、BMP/PNG/JPEG/GIF/ICOなどの画像ファイルの読み書き、EXE/DLLファイルの編集など。
スポンサーリンク
関連記事
公開日:2016年01月04日 最終更新日:2016年10月05日
記事NO:01680
プチモンテ ※この記事を書いた人
![]() | |
![]() | 💻 ITスキル・経験 サーバー構築からWebアプリケーション開発。IoTをはじめとする電子工作、ロボット、人工知能やスマホ/OSアプリまで分野問わず経験。 画像処理/音声処理/アニメーション、3Dゲーム、会計ソフト、PDF作成/編集、逆アセンブラ、EXE/DLLファイルの書き換えなどのアプリを公開。詳しくは自己紹介へ |
| 🎵 音楽制作 BGMは楽器(音源)さえあれば、何でも制作可能。歌モノは主にロック、バラード、ポップスを制作。歌詞は抒情詩、抒情的な楽曲が多い。楽曲制作は🔰2023年12月中旬 ~ | |









