Javascript 如何使用phonegap文件api在该目录中创建目录和文件?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/11077303/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-24 04:20:26  来源:igfitidea点击:

How to create a directory and file in that directory using phonegap file api?

javascriptcordovaipadphonegap-build

提问by mmathan

I am using phonegap file api to create a directory and create a file in the directory created. The directory is getting created, but the file is not getting created in the directory.

我正在使用phonegap文件api创建一个目录并在创建的目录中创建一个文件。正在创建目录,但未在目录中创建文件。

The code I am using is:

我正在使用的代码是:

document.addEventListener("deviceready", onDeviceReady, false);

function onDeviceReady() {
    window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, fail);
}

function gotFS(fileSystem) {
    var dataDir = fileSystem.root.getDirectory("data", {create: true});
    var file = dataDir.getFile("lockfile.txt", {create: true, exclusive: true});
}

The directory data is created but lockfile.txtis not getting created.

目录数据已创建但未lockfile.txt创建。

回答by Simon MacDonald

You need to call the code in an async manner:

您需要以异步方式调用代码:

document.addEventListener("deviceready", onDeviceReady, false);

function onDeviceReady() {
    window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, fail);
}

function gotFS(fileSystem) {
   fileSystem.root.getDirectory("data", {create: true}, gotDir);
}

function gotDir(dirEntry) {
    dirEntry.getFile("lockfile.txt", {create: true, exclusive: true}, gotFile);
}

function gotFile(fileEntry) {
    // Do something with fileEntry here
}

回答by luther

Is this work?

这是工作吗?

var file = fileSystem.root.getFile("data" + "lockfile.txt", {create: true, exclusive: true});

回答by Parth Devmorari

Download file from the url to your device using phonegap

使用 phonegap 将文件从 url 下载到您的设备

It is working 3.0 and up to for iOS and android

它适用于 3.0 及更高版本,适用于 iOS 和 android

var folderName = 'xyz';
var fileName;

function downloadFile(URL) {
    //step to request a file system 
    window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, fileSystemSuccess, fileSystemFail);

    function fileSystemSuccess(fileSystem) {
        var download_link = encodeURI(URL);
        fileName = download_link.substr(download_link.lastIndexOf('/') + 1); //Get filename of URL
        var directoryEntry = fileSystem.root; // to get root path of directory
        directoryEntry.getDirectory(folderName, {
            create: true,
            exclusive: false
        }, onDirectorySuccess, onDirectoryFail); // creating folder in sdcard
        var rootdir = fileSystem.root;
        var fp = fileSystem.root.toNativeURL(); // Returns Fullpath of local directory

        fp = fp + "/" + folderName + "/" + fileName; // fullpath and name of the file which we want to give
        // download function call
        filetransfer(download_link, fp);
    }

    function onDirectorySuccess(parent) {
        // Directory created successfuly
    }

    function onDirectoryFail(error) {
        //Error while creating directory
        alert("Unable to create new directory: " + error.code);

    }

    function fileSystemFail(evt) {
        //Unable to access file system
        alert(evt.target.error.code);
    }
}

function filetransfer(download_link, fp) {
    var fileTransfer = new FileTransfer();
    // File download function with URL and local path
    fileTransfer.download(download_link, fp,
        function(entry) {
            alert("download complete: " + entry.fullPath);
        },
        function(error) {
            //Download abort errors or download failed errors
            alert("download error source " + error.source);
        }
    );
}

回答by Parth Devmorari

function download(URL, fileName){
   var folderName = 'xyz';
   var uri = encodeURI(URL);

        window.requestFileSystem(LocalFileSystem.PERSISTENT, 0,
            function (fileSystem) {
                var directoryEntry = fileSystem.root; // to get root path of directory
                directoryEntry.getDirectory(folderName, {
                    create: true,
                    exclusive: false
                }, onDirectorySuccess, onDirectoryFail); 
                var filename = fileSystem.root.toURL() + folderName + "/" + uri.substr(uri.lastIndexOf("/") + 1);

                var fileTransfer = new FileTransfer();
                fileTransfer.download(uri, filename,
                    function(entry) { // download success
                        var path = entry.toURL(); //**THIS IS WHAT I NEED**
                        window.plugins.toast.showLongBottom("Download Completed: " + entry.fullPath, function (a) {
                        }, function (b) {
                        });
                    },
                    function(error) {
                        console.log("error")
                    } // irrelevant download error
                );`enter code here`
            },
            function(error) {
                console.log("error2")
            } // irrelevant request fileSystem error
        );

        function onDirectorySuccess(parent) {
            // Directory created successfuly
            console.log("Directory created successfuly: " + JSON.stringify(parent));
            var fp = (parent.nativeURL) + fileName;
            filetransfer(download_link, fp);
        }

        function onDirectoryFail(error) {
            //Error while creating directory
            alert("Unable to create new directory: " + error.code);
        }
    }