如何解决Cordova 读取外部存档并播放
我正在使用插件文件传输使用cordova for android创建一个应用程序。下载将转到某个文件夹,但尽管指示代码后面的路径正确,但我无法读取文件
var uri = encodeURI(mypage);
var fileURL = cordova.file.externalDataDirectory + "teste.ogg";
fileTransfer.download(
uri,fileURL,function(entry) {
console.log("download complete: " + entry.toURL());
$("#audio-teste").attr('src',fileURL)
/*--codigo de teste--*/
var meuFile = cordova.file.externalDataDirectory;
resolveLocalFileSystemURL(meuFile,function(entry) {
var readerN = fileSystem.createReader();
readerN.readEntries(
function (entry) {
var arrayN =[];
for(var i="0"; i < entry.length; ++i){
var entradaN = entry[i].name;
arrayN.push(entradaN);
//console.log(array);
console.log('teste aq' + arrayN);
}
}
)
//console.log(entry);
});
/*----*/
},function(error) {
console.log("download error source " + error.source);
console.log("download error target " + error.target);
console.log("download error code" + error.code);
},false,{
headers: {
"Authorization": "Basic dGVzdHVzZXJuYW1lOnRlc3RwYXNzd29yZA=="
}
}
);
/*----*/
解决方法
cordova 插件 cordova-plugin-file-transfer
是 due to be deprecated 及其最新的 npm version fails on iOS。
因此这两个工作函数完全基于vanilla JS,因此除了标准插件cordova-plugin-file
外,无需使用额外的插件。因此,这与任何平台兼容。
https://gist.github.com/jfoclpf/07e52f6bdf9c967449c4bc06af44c94a
为了您的方便,我贴在这里:
// for different types of cordovaFileSystem check here:
// https://cordova.apache.org/docs/en/latest/reference/cordova-plugin-file/#where-to-store-files
// or simply type in the console `console.log(cordova.file)`
function downloadFileToDevice (fileurl,filename,cordovaFileSystem,callback) {
var onerror = (err) => {
console.error(`Error downloading from ${fileurl} to cordovaFileSystem ${cordovaFileSystem}`,err,new Error(err))
if (typeof callback === 'function') { callback(Error(err)) }
}
var blob = null
var xhr = new XMLHttpRequest()
xhr.open('GET',fileurl)
xhr.responseType = 'blob' // force the HTTP response,response-type header to be blob
xhr.onload = () => {
blob = xhr.response // xhr.response is now a blob object
var DataBlob = blob
window.resolveLocalFileSystemURL(cordovaFileSystem,(dirEntry) => {
const sanitizedFilename = filename.replace(/[^a-z0-9\.]/gi,'_').toLowerCase() // sanitize filename
dirEntry.getFile(sanitizedFilename,{ create: true },(file) => {
file.createWriter((fileWriter) => {
fileWriter.write(DataBlob)
if (typeof callback === 'function') { callback(null,cordovaFileSystem + sanitizedFilename) }
},(err) => { console.error('Error on file.createWriter'); onerror(err) })
},(err) => { console.error('Error on dirEntry.getFile'); onerror(err) })
},(err) => { console.error('Error on resolveLocalFileSystemURL'); onerror(err) })
}
xhr.onerror = (err) => { console.error('Error on XMLHttpRequest'); onerror(err) }
xhr.send()
}
下载文件的示例
downloadFileToDevice('https://example.com/img.jpg','myImg.jpg',cordova.file.cacheDirectory,(err,localFilePath) => {
if (err) {
console.error('An error occured downloading file:',err)
} else {
console.log('Download file with success: ' + localFilePath)
}
})
你能试试这个吗?我试过了,它就像一个魅力
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。