android 为从电容器SendIntent.checkSendItnentReceived共享的图像创建javascript文件对象

rbl8hiat  于 2023-04-28  发布在  Android
关注(0)|答案(1)|浏览(98)

我正在使用SendIntent plugin for capacitor(https://github.com/carsten-klaffke/send-intent)从其他应用程序接收共享数据到我的android capacitor应用程序。当我共享文本数据时,它工作正常,但当我尝试共享图片时,我无法使用它在url属性中发送的路径来创建File对象。
我已经尝试了几种不同的方法来创建一个blob使用它发送的路径,然后创建一个文件使用new File([blob], 'name', type),他们都没有工作.根据插件的文档,使用Filesystem.readFile()(另一个电容器插件),我相信它在数据属性中返回一个base64编码的字符串。我尝试使用以下方法将base64字符串转换为blob:

const { data } = await Filesystem.readFile({
              path: resultUrl
            });
            const bytes = new Array(data.length);
            for (var x = 0; x < data.length; x++) {
                bytes[x] = data.charCodeAt(x);
            }
            const arr = new Uint8Array(bytes);
            const blob = new Blob([arr], {type: shareObject.type});
            const sharedFile = new File([blob], resultUrl.split('/').pop(), {type: blob.type});

当我退出sharedFile.name和sharedFile.size时,它们都与我试图共享的图像一致,但当我尝试在视图中显示时,我无法在应用程序中看到该图像。
我是否遗漏了什么?从与SendIntent共享的图像创建javascript File对象的最佳方法是什么?
TIA

ffscu2ro

ffscu2ro1#

你可以使用convertFileSrc(...)​来实现:

const savedPhoto = Capacitor.convertFileSrc(resultUrl),
document.getElementById("savedPhoto").src = savedPhoto;
<img id="savedPhoto" />

顺便说一句:如果你可以共享字符串,你也可以直接以Base64格式共享图像。

相关问题