Browserの場合はfile download、アプリの場合はそのままファイルに保存。どちらも Downloads folderに保存される。

格式
JavaScript
提交日期
2016-11-14 04:23
Publication Period
Unlimited
  1. class SaveFile {
  2. constructor() {
  3. this.filename = null;
  4. this.callbackComplete = null;
  5. this.callbackError = null;
  6. }
  7. // ブラウザ上で実行している場合のファイル保存処理
  8. saveFileBrowser(filename, data) {
  9. // Blobに変換して download
  10. let blob = new Blob([data], { type: "text/plain" });
  11. let a = document.createElement('a');
  12. a.href = URL.createObjectURL(blob);
  13. a.target = '_blank';
  14. a.download = filename; // Edgeは無効……
  15. a.click();
  16. // download完了後に memory解放したほうがいい
  17. // URL.revokeObjectURL();
  18. };
  19. // アプリケーションとして実行している場合のファイル保存処理
  20. saveFileApp(filename, data, callbackComplete, callbackError) {
  21. if (null != callbackComplete) this.callbackComplete = callbackComplete;
  22. if (null != callbackError) this.callbackError = callbackError;
  23. // Unique filename作成 (ABC.txtが既にある → ABC(1).txt という file nameになる
  24. // write, append指定はerrorになる。filepickerかmanifestで権限取得する必要があるかも
  25. let fileoption = Windows.Storage.CreationCollisionOption.generateUniqueName;
  26. Windows.Storage.DownloadsFolder.createFileAsync(filename, fileoption).done(this.saveFileAppOpenFile.bind(this, data), this.saveFileError.bind(this));
  27. };
  28. // 以下、Private関数 -------------------
  29. saveFileAppOpenFile(savedata, file) { // [!!caution] callback設定時に savedataを無理やりbind済み
  30. // 実際に書き込まれた file nameを取得
  31. let name = file.name;
  32. // file objectの pathを参照すると保存先 folderが大変なことになっているが
  33. // 実際に保存される場所は Downloads/<ApplicationName>/ になる
  34. // この時点で fileは既に open済みになっている
  35. // fileへデータ書き込み
  36. Windows.Storage.FileIO.writeTextAsync(file, savedata);
  37. // 書き込み完了チェック
  38. Windows.Storage.CachedFileManager.completeUpdatesAsync(file).done(this.saveFileComplete.bind(this), this.saveFileError.bind(this));
  39. };
  40. saveFileComplete() {
  41. // 保存完了
  42. debuglog('ファイル保存完了');
  43. if (null != this.callbackComplete) this.callbackComplete();
  44. };
  45. saveFileError(err) {
  46. console.error('ファイル保存エラー\nerror=' + err.message + 'description=' + err.description);
  47. if (null != this.callbackError) this.callbackError(err.message);
  48. };
  49. } // class SaveFile
下载 可打印视图

网址

Embed with JavaScript

Embed with iframe

原始文本