1. ホーム
  2. Web制作
  3. html5

ローカルファイルの読み書きを行うためのHTML5実装

2022-01-21 06:18:20

最近、htmlページ上にエクスポートするためのボタンがあり、クリックするとドキュメントを構築してローカルファイルシステムに保存するという要件がありました。また、クリックすると、ローカルファイルシステムからファイルを読み込んで、その内容を解析するボタンもあります。

はっきり言って、ローカルファイルシステムからファイルを読み書きする方法というのは、一つです。

このことは、html5以前は、ブラウザがローカルファイルシステムを非常に強力に保護しており、サンドボックスと呼ばれる仕組み、要するにjsが直接操作できないようになっていたようで、非常に怖いことでした。で、今回は、あるファイルを読むには、そのファイルをサーバーにアップロードし、サーバーがそのファイルを読んで解析し、解析結果をクライアントに返すという仕組みになっています。ファイルを書き込むのは少し簡単で、jsには書き込む方法がないので、サーバーが動的にファイルを生成して、添付ファイルの形でダウンロードするしかない。しかし、これは実は非常に無理がある。なぜなら、ファイルを操作するのはjsエンジンですが、その途中にはサーバーを通す必要があるからです。

html5は、それがファイルシステムAPIのセットを提供し、ファイルの読み取りと書き込みを実現することができます来た、私は好奇心、この需要は非常に一般的かもしれませんが、非常に少数のデモがオンラインで存在します。

ファイルの読み込み

ファイル読み込みに利用するAPIはFileReader、html内の要素は

import torchvision


 htmlの要素はとてもシンプルで、まずファイルタイプの入力要素が必要ですが、ここでなぜdisplay:noneなのでしょうか?なぜなら、これはあまりにも醜いからです。

jsのコードです。

$("#import").click(function(){//Click the import button to make files trigger a click event, then finish reading the file.
        $("#files").click();
    });
 
function import(){
    var selectedFile = document.getElementById("files").files[0];//Get the read File object
    var name = selectedFile.name;//read the file name of the selected file
    var size = selectedFile.size;//read the size of the selected file
    console.log("File name:"+name+"Size:"+size);
 
    var reader = new FileReader();// Here is the core!!! Read operations are done by it.
    reader.readAsText(selectedFile);//read the contents of the file
 
    reader.onload = function(){
        console.log(this.result);//when the reading is complete will call back to this function, and then the contents of the file is stored in the result. You can manipulate it directly.
    };
}


これで、ローカルファイルを読み込む操作は完了です。ActiveXObjectを使うとかなんとか言っているユーザーもいますが、これはIEでしか使えません、今はマイクロソフトもIEに見切りをつけていますので、このような使い方はやめましょう。

ファイルへの書き込み

ファイルの書き込みは若干複雑で、html5にはFileReaderに相当するFileWriterもありますが、こいつは実に使い勝手が悪く、少なくとも私はほとんど一日中調べましたが使えるAPIが見つからず、しかもFileReaderはChrome、FF、Safariで対応可能です。もちろん、あるバージョン以上のものが必要です。しかし、FileWriterはChromeのみ対応しているようです。なんにせよ、動くのはいいことだ。

// First import a js file
<script type="text/JavaScript" src=". /js/FileSaver.js" charset="utf-8"></script>


//add an export element to the html 
<input type="button" id="export" value="export"/>

//js file
$("#export).click(function(){
    var content = "This is a direct export using html5";
    var blob = new Blob([content], {type: "text/plain;charset=utf-8"});
    saveAs(blob, "file.txt");//saveAs(blob,filename)
});


今回はHTML5でローカルファイルの読み書きを実現する方法を紹介しましたが、より関連するHTML5のローカルファイルの読み書きの内容は、BinaryDevelopの過去の記事を検索するか、以下の関連記事を引き続き閲覧してください、今後もBinaryDevelopを応援してください!