gpt4 book ai didi

ios - PhoneGap 检查文件是否存在

转载 作者:行者123 更新时间:2023-11-29 01:41:36 25 4
gpt4 key购买 nike

我想检查文件是否存在,如果不存在,就下载它。我在 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

那么为什么会这样呢?

附言

与博文中建议的代码问题完全相同,即调用了两个函数。

最佳答案

您的代码将被调用 函数作为回调传递,而不是函数本身。让我举个例子。假设你有函数 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);

这意味着您需要访问您需要的值,而不是作为参数,而是作为常规变量。

关于ios - PhoneGap 检查文件是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32329311/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com