我在我的应用程序中使用需要作为缓冲区数组获取的音频文件。为此,我让用户选择一个文件(使用 Ionic/Cordova FileChooser 插件 https://ionicframework.com/docs/native/file-chooser/)然后我得到一个像这样的URL:
content://com.android.providers.media.documents/document/audio%3A8431
之后,我将此发送至科尔多瓦插件文件 https://github.com/apache/cordova-plugin-file resolveNativePath
函数,我得到一个类似的路径:
file:///storage/emulated/0/Prueba interno/Interno, Teddybär, Dreh Dich Um__320kbps.mp3
在这里我做我的audioFileInfo
Object
audioFileInfo = {name: "Interno, Teddybär, Dreh Dich Um__320kbps.mp3",
originalPath: "content://com.android.providers.media.documents/document/audio%3A8431",
path: "file:///storage/emulated/0/Prueba interno"}
最后我打电话filePlugin.readAsArrayBuffer(audioFileInfo.path, audioFileInfo.name)
获取缓冲区数组。
当文件位于设备内部存储时,它可以正常工作,但是当文件来自 SDCard 时,它不起作用,因为readAsArrayBuffer
返回“未找到”。
SD Card:
文件选择器 URL
content://com.android.externalstorage.documents/document/3D91-1C14%3AM%C3%BAsica%20Dana%2F1%20-%20Teddyb%C3%A4r%2C%20Teddyb%C3%A4r%2C%20Dreh%20Dich%20Um__320kbps.mp3
解析本地路径:
file:///sdcard/Música Dana/1 - Teddybär, Teddybär, Dreh Dich Um__320kbps.mp3
音频文件信息:
audioFileInfo = {
name :"1 - Teddybär, Teddybär, Dreh Dich Um__320kbps.mp3"
originalPath : "content://com.android.externalstorage.documents/document/3D91-1C14%3AM%C3%BAsica%20Dana%2F1%20-%20Teddyb%C3%A4r%2C%20Teddyb%C3%A4r%2C%20Dreh%20Dich%20Um__320kbps.mp3",
path : "file:///sdcard/Música Dana"
}
读取为数组缓冲区:
FileError {code: 1, message: "NOT_FOUND_ERR"}
我已经尝试过 FilePlugins 的resolveLocalFilesystemUrl()
我明白了Entry
object:
{
filesystem: {
name: "content",
root: {
filesystem {
name: "content",
root: "...."
}
},
fullPath: "/",
isDirectory: true,
isFile: false,
name: "",
nativeURL: "content://",
},
fullPath: "/com.android.externalstorage.documents/document/3D91-1C14:Música Dana/1 - Teddybär, Teddybär, Dreh Dich Um__320kbps.mp3",
isDirectory: false,
isFile: true,
name: "1 - Teddybär, Teddybär, Dreh Dich Um__320kbps.mp3",
nativeURL: "content://com.android.externalstorage.documents/document/3D91-1C14%3AM%C3%BAsica%20Dana%2F1%20-%20Teddyb%C3%A4r%2C%20Teddyb%C3%A4r%2C%20Dreh%20Dich%20Um__320kbps.mp3",
}
但是我不知道该用什么path
在第一个参数中readAsArrayBuffer
功能。
如果我使用fullPath
and name
它抛出编码错误。
如果我只得到没有名称的“路径”fullPath
,它也会抛出编码错误.
有人有类似的经历吗?