PhoneGap 检查文件是不是存在
Posted
技术标签:
【中文标题】PhoneGap 检查文件是不是存在【英文标题】:PhoneGap check if file existsPhoneGap 检查文件是否存在 【发布时间】:2015-09-01 10:29:44 【问题描述】:我想检查文件是否存在,如果不存在,请下载它。我在this SO question 和this blog post 中尝试过建议的解决方案
但是这些解决方案都不适合我。这是我基于 SO 问题的代码:
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function (fileSystem)
console.log("gotFS");
getFolder(fileSystem, video.folderName, function(folder)
console.log("Got folder");
var filePath = folder.toURL() + "\/" + "videotest.mp4";
fileSystem.root.getFile(filePath, create: false , playVideo(filePath, true), transferFile(video.uri, filePath));
, function()
console.log("failed to get folder");
);
,
function()
console.log("failed to get filesystem");
);
播放视频功能如下:
function playVideo(uri, hasBeenDownloaded)
console.log("was video dowloaded already", hasBeenDownloaded);
var player = document.getElementById("videoPlayer");
var source = document.createElement("source");
source.src = uri;
source.type = "video/mp4";
player.appendChild(source);
player.load();
这里是 transferFile 函数:
function transferFile(uri, filePath)
var transfer = new FileTransfer();
transfer.download(
uri,
filePath,
function (entry)
var targetPath = entry.toURL();
console.log("target path je", targetPath);
document.getElementById("result").innerhtml = "File saved to: " + targetPath;
playVideo(targetPath, false);
,
function (error)
document.getElementById("result").innerHTML = "An error has occurred: Code = " + error.code;
console.log("download error source " + error.source);
console.log("download error target " + error.target);
console.log("upload error code" + error.code);
);
无论文件是否存在,playVideo 和 transferFile 都会被调用。
例如,如果文件已经存在,首先只调用 playVideo 并在控制台中记录:
was video dowloaded already: true
一段时间后,我看到调用了 transferFile 函数,下载文件时它会调用 playVideo 并且在控制台中我可以看到:
was video dowloaded already: false
那么为什么会这样呢?
附言
与博文中建议的代码问题完全相同,即两个函数都被调用。
【问题讨论】:
【参考方案1】:您的代码将 called 函数作为回调传递,而不是函数本身。让我举个例子吧。想象一下,你有函数 Foo。它要求您传递 2 个回调函数 - 一个用于成功,一个用于失败。你可以这样做:
function good() alert('good'); ;
function bad() alert('bad'); ;
foo(good, bad);
但是,这就是你所做的:
foo(good(), bad());
这就是为什么你们都被召唤了。你需要改变:
fileSystem.root.getFile(filePath, create: false , playVideo(filePath, true), transferFile(video.uri, filePath));
到
fileSystem.root.getFile(filePath, create: false , playVideo, transferFile);
这意味着您需要访问的值不是作为参数,而是作为常规变量。
【讨论】:
我这样做真的很愚蠢,感谢您的回复,这解决了我的问题:)以上是关于PhoneGap 检查文件是不是存在的主要内容,如果未能解决你的问题,请参考以下文章