gpt4 book ai didi

javascript - js.writeFile 未正确写入 Blob

转载 作者:行者123 更新时间:2023-12-03 05:11:18 24 4
gpt4 key购买 nike

我有一个 Angular 服务,具有写文件功能。该函数可以在 Ionic 或 Electron 平台上运行。对于 Ionic,它使用 $cordovaFile 进行文件操作,对于 Electron,它使用 Node fs 库。

功能如下:

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);
}
};

使用Ionic平台时,功能正常,下载的文件写入正确。然而,当使用Electron平台时,下载的文件包含的都是字符串[object Blob]

使用 fs 将 Blob 写入文件的正确方法是什么?

更多信息

数据最初以 Base64 形式记录在 JSON 消息中,但我们随后用它来执行此操作

let fileBlob = this.stringUtilityService.b64ToBlob(dataObj.Data[i].FileContents, 'image/png');

this.fileSystemService.writeFile(dataObj.Data[i].FileName, 'icons', fileBlob);

更多信息

这是 b64ToBlob() 函数,尽管据我所知,该函数工作正常并正确返回 Ionic 应用程序正确保存并可以显示的 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;
}

最佳答案

b64ToBlob 函数重写为下面的代码即可正常工作。如果base64编码的字符串有的话,您需要取出像data:image/gif;base64,这样的标题签名字符串。

b64ToBlob(b64Data: string): any {
return Uint8Array.from(atob(b64Data), (c) => c.charCodeAt(0));
}

关于javascript - js.writeFile 未正确写入 Blob,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41808702/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com