ファイルを書き込むための関数を持つAngularサービスがあります。この機能は、イオンまたは電子のいずれかのプラットフォームで機能することができます。 Ionicでは、ファイルアクションには$ cordovaFileを使用し、ノードfsライブラリにはElectronを使用します。js.writeBlobが正しく書かれていない
writeFile(filename: string, dirname: string, data: string | Blob, replace?: boolean): ngCordova.IFilePromise<ProgressEvent> {
if (this.isElectron) {
let promiseObj = this.$q.defer();
if (replace) {
try {
fs.unlinkSync('./' + dirname + '/' + filename);
}
catch (err) {
//err
}
}
fs.writeFile('./' + dirname + '/' + filename, data, 'binary',() => {
promiseObj.resolve(true);
});
return promiseObj.promise;
}
else {
return this.$cordovaFile.writeFile(cordova.file.dataDirectory + dirname, filename, data, replace);
}
};
イオンのプラットフォームを使用する場合は、機能が正常に動作し、ダウンロードしたファイルが正しく離れて書かれているが、次のよう
関数です。ただし、電子プラットフォームを使用する場合、ダウンロードされるすべてのファイルには文字列[object Blob]
が含まれています。
fsを使用してBlobをファイルに書き込む正しい方法は何ですか?
MORE INFOはは
データは元々JSONメッセージにbase64でてダウンしていたが、我々はそれ
let fileBlob = this.stringUtilityService.b64ToBlob(dataObj.Data[i].FileContents, 'image/png');
this.fileSystemService.writeFile(dataObj.Data[i].FileName, 'icons', fileBlob);
EXTRA MORE INFOここ
でこれを行うには、b64ToBlobです私の知る限り、この関数はうまく動作し、正しくIomeアプリが正しく保存して表示することができるBLOBを返します。
b64ToBlob(b64Data: string, contentType: string): any {
let sliceSize = 512;
let byteCharacters = atob(b64Data);
let byteArrays = [];
for (let offset = 0; offset < byteCharacters.length; offset += sliceSize) {
let slice = byteCharacters.slice(offset, offset + sliceSize);
let byteNumbers = new Array(slice.length);
for (let i = 0; i < slice.length; i++) {
byteNumbers[i] = slice.charCodeAt(i);
}
let byteArray = new Uint8Array(byteNumbers);
byteArrays.push(byteArray);
}
let blob = new Blob(byteArrays, { type: contentType });
return blob;
}
「データ」パラメータにはどのような種類のデータがありますか?それはbase64エンコードされたデータですか? – IzumiSy
元の投稿に情報を追加しました。 –
ポイントを得ました。私はこのポストは、あなたがblobにbase64を変換する方法を知っていると便利だと思う:http://stackoverflow.com/questions/23986953/blob-saved-as-object-object-nodejs – IzumiSy