是否可以将 blob 文件转换为 Javascript(Ionic,Angular)中的 base64Data?

Is it possible to convert a blob file into a base64Data in Javascript (Ionic,Angular)?

[

async FileZip() {
    const code = await fetch("./assets/input.txt")
    var blob = await downloadZip([code]).blob()
     console.log(blob);

 
   function blobToBase64(blob: Blob): Observable<string> {
      return new Observable<string>(observer => {
          const reader = new FileReader();
         reader.onerror = observer.error;
          reader.onabort = observer.error;
          reader.onload = () =>                     observer.next(reader.result as string);
          reader.onloadend = observer.complete;


    FileSharer.share({
      filename: "input.zip",
      base64Data: //base64datawillbehere ,
      contentType: 'application/zip'
    });
    reader.readAsDataURL(blob);
  })

我对 Ionic 和应用程序开发还很陌生。 我使用 client-zip library. Using the downloadZip() I am getting a zip blob file like this 将文本文件压缩为 zip blob 文件。 我想使用 Capacitor Filesharer 将此文件作为 zip 文件共享。但是要使用这个 Filesharer 插件,我似乎必须将这个 blob zip 文件转换为 base64 数据。 谁能告诉我怎么做??或者甚至可以这样做吗??

如果您觉得我的问题太不成熟,请原谅我,因为正如我所说,我对 javascript 还很陌生。

考虑使用以下函数:

function blobToBase64(blob: Blob): Observable<string> {
    return new Observable<string>(observer => {
        const reader = new FileReader();
        reader.onerror = observer.error;
        reader.onabort = observer.error;
        reader.onload = () => observer.next(reader.result as string);
        reader.onloadend = observer.complete;
        reader.readAsDataURL(blob);
    })
}

尝试修改您的代码,如下所示:(没有更改之前的答案,因为它可能对其他人使用 Observable 策略实施此类操作很有用,这与我的情况不同会推荐使用 Promise)

ngOnInit(): void {
  this.fileZip();
}

private blobToBase64(blob: Blob): Promise<string> {
  return new Promise((resolve, reject) => {
    const reader = new FileReader();
    reader.onerror = reject;
    reader.onabort = reject;
    reader.onload = () => resolve(reader.result as string);
    reader.readAsDataURL(blob);
  })
}

private async fileZip(): Promise<void> {
  const code = await fetch("./assets/input.txt")
  const blob = await downloadZip([code]).blob();
  const base64Data = await this.blobToBase64(blob);
  await FileSharer.share({
    filename: "input.zip",
    base64Data: base64Data,
    contentType: "application/zip",
  })
}

你可以试试这个代码-

fileZip() {
constcode = awaitfetch("./assets/input.txt");
varblob = awaitdownloadZip([code]).blob()
console.log(blob);
varreader = newFileReader();
reader.readAsDataURL(blob); 
reader.onloadend = ()=> {
constresult = reader.resultasstring;
constbase64Data = result.split(',')[1];
console.log(base64Data)
FileSharer.share({
filename:"json.zip",
base64Data,
contentType:'application/zip'
    });
  }
}