Ionic Capacitor File Picker在本机移动的上不返回blob

ddrv8njm  于 11个月前  发布在  Ionic
关注(0)|答案(1)|浏览(192)

我在移动的上使用@capawesome/capacitor-file-picker来选择文件。但它不返回blob。

const result = await FilePicker.pickFiles({
      types: ['application/pdf'],
        multiple: false,
      });

const file = result.files[0];

if(file.blob){ **//fails here because file.blob not exist**
        const rawFile = new File([file.blob as BlobPart], file.name, {
          type: file.mimeType,
        });
        callback(rawFile, file.name)
      }

字符串
当我console.log文件:

mimeType: "application/pdf"
modifiedAt: 1696191033806
name: "filename.pdf"
path: "file:///path/to/file/filename.pdf"
size: 1332512


没有blob:(
获取文件的blob,当console.log(file)它应该是:

blob: `sum-blob`
mimeType: "application/pdf"
modifiedAt: 1696191033806
name: "filename.pdf"
path: "file:///path/to/file/filename.pdf"
size: 1332512

xggvc2p6

xggvc2p61#

所以实际上电容器文件拾取器,当拾取文件时,我们可以使用readData选项为true。所以它看起来像这样:

const result = await FilePicker.pickFiles({
  types: ['application/pdf'],
  multiple: false,
  readData: true,
});

字符串
它将返回:

data:"JVBERi0xLjcKJb/3ov4KMSAwIG9iago8PCAvVHlwZSAvT2JqU3RtIC9MZW5ndGggMzEyOCAvRmlsdGVyIC9GbGF0ZURlY29kZSAvTiA4MCAvRmlyc3QgNjI3ID4+CnN0cmVhbQp4nNVa…"
mimeType: "application/pdf"
modifiedAt: 1696191033806
name: "filename.pdf"
path: "file:///path/to/file/filename.pdf"
size: 1332512


data是文件的base64,所以我们可以使用我在互联网上找到的这个函数将其转换为blob:

dataURItoBlob(dataURI: any) {
    const byteString = window.atob(dataURI);
    const arrayBuffer = new ArrayBuffer(byteString.length);
    const int8Array = new Uint8Array(arrayBuffer);
    for (let i = 0; i < byteString.length; i++) {
      int8Array[i] = byteString.charCodeAt(i);
    }
    const blob = new Blob([int8Array], { type: 'image/png' });    
    return blob;
}


这样我们就可以:

const fileBlob = this.dataURItoBlob(base64);
const rawFile = new File([fileBlob as BlobPart], file.name, {
    type: file.mimeType,
});


它返回base64作为blob:),rawFile已经包含blob!

相关问题