我正在尝试将视频下载并存储到本地设备(目前是Galaxy S5(,然后使用HTML5视频标签播放它们。
但是,当我尝试将它们存储到应用程序文件目录中时,文件没有被保存(即使我得到了一个返回给成功回调的 FileEntry 对象。
我的代码如下:
fileurl = "http://timelivingapp.absolute-staging.co.uk/src/branches/cms/public/uploads/1418656353chrome.mp4";
filename = fileurl.split("/");
filename = filename[filename.length - 1];
dataTool.ticker.addRequest();
fileTransfer = new FileTransfer();
fileTransfer.download(fileurl,"cdvfile://localhost/files/" + filename,
function(fe){
alert("ok");
alert(fe.toURL());
console.log(fe);
dataTool.ticker.addResponse();
},
function(err){
alert("There was an error downloading "+err.source+" to "+err.target+"");
},true);
如果我用 cdvfile://localhost/persistent 替换 cdvfile://localhost/files,那么它确实会下载它们,但它直接存储在文件系统上的/Android/目录中,而不是存储在应用程序本身中,这将是可怕的(当然考虑到会有 500+ 图像和视频被下载!!
无论哪种方式,我都会尝试绘制视频标签,并且视频无法加载 - 使用:
document.getElementById("appBody").innerHTML = "<video id='vidPanel' style='width:400px;height:400px;'><source src='cdvfile://localhost/persistent/1418656353chrome.mp4' type='video/mp4'></video>";
调用这个,视频标签被绘制,但视频图像损坏(以上是我用 persistent 进行测试时,但即使这样,当文件下载时(我可以在我的文件系统中看到它(,它仍然无法播放。
还尝试使用"本机"URL,但也失败了:
document.getElementById("appBody").innerHTML = "<video id='vidPanel' style='width:400px;height:400px;'><source src='file:///storage/emulated/0/1418656353chrome.mp4' type='video/mp4'></video>";
任何想法将不胜感激!!
看起来文件目标不正确。这里有文件传输的Android文件系统文档。https://cordova.apache.org/docs/en/latest/reference/cordova-plugin-file/
安卓文件系统
我遇到了类似的问题,这里有我的问题,其中包含下载和播放视频的代码:无法使用Phonegap应用程序在IOS 9中播放本地视频
写文件:
var uri = encodeURI(file.url);
var fileTransfer = new FileTransfer();
// var fileLocation = cordova.file.applicationStorageDirectory +
// '/Documents/' + file.folder + '/' + file.fileName;
var fileLocation = cordova.file.dataDirectory + file.fileName;
var deferred = $q.defer();
fileTransfer.headers = {
Connection: "close"
};
fileTransfer.download(uri, fileLocation, function(result) {
console.log("Fichero descargado: " + JSON.stringify(result));
deferred.resolve(result);
}, function(error) {
deferred.reject(error);
});
return deferred.promise;
读:
var deferred = $q.defer();
var nativePath = cordova.file.dataDirectory + nombreFichero + "." + extension;
resolveLocalFileSystemURL(nativePath, function(entry) {
//deferred.resolve(entry.nativeURL);
console.log("Fichero native: " + entry.toNativeURL());
console.log("Fichero fullPath: " + entry.fullPath);
console.log("Fichero toUrl: " + entry.toURL());
console.log("Fichero toInternalURL: " + entry.toInternalURL());
deferred.resolve(entry.toURL());
}, function(error) {
console.log("Error al leer el fichero: " + JSON.stringify(error));
deferred.reject(error);
});
return deferred.promise;