1

我正在尝试在我的应用程序上开发一项服务,以使用cordova在设备(iOS和android)的存储上下载和写入文件。该代码不会创建新文件,也不会显示任何错误,这就是文件编写器无法继续的原因。

代码有什么问题?找到沃利请!

downloadFile(url, fileName) {
    return new Promise((resolve, reject) => {
        let blob
        this.http
            .get(url, { responseType: ResponseContentType.Blob })
            .map(res => res.blob())
            .subscribe(
            data => {
                blob = data;
                if (blob) {
                    console.log('[ViewerService]: blob data recived from ' + url);
                    this.writeFile(blob, fileName).then(
                        fileEntry => {
                            resolve(fileEntry)
                        },
                        error => {
                            reject()
                        }
                    )
                } else {
                    console.error('[ViewerService]: blob data is null');
                    reject();
                }
            })
    })
}


writeFile(blob, fileName) {
    return new Promise((resolve, reject) => {
        this.resolveDir(blob, fileName)
            .then(
            fs => {
                this.createFile(fs, fileName, blob, false)
                    .then(
                    fileEntry => {
                        this.runFileWriter(fileEntry, blob)
                            .then(
                            fileEntry => resolve(fileEntry),
                            e => reject()
                            )
                    },
                    e => console.log(e)
                    )
            },
            e => console.log(e)
            )
    })
}
resolveDir(blob, fileName) {
    return new Promise((resolve, reject) => {
        console.log('[FileService]: Resolving URL...');
        this.file.resolveDirectoryUrl(cordova.file.cacheDirectory).then(
            dir => resolve(dir),
            e => reject(e)
        )
    })
}

createFile(dirEntry, fileName, blob, isAppend) {
    return new Promise((resolve, reject) => {
        dirEntry.getFile(fileName, { create: true, exclusive: false },
            function (fileEntry) {
                resolve(fileEntry);
            },
            function (e) {
                reject(e)
            });
    })
}

runFileWriter(fileEntry, dataObj) {
    return new Promise((resolve, reject) => {
        fileEntry.createWriter(function (fileWriter) {
            fileWriter.onwriteend = function () {
                console.log("[FileService]: Successful file write");
                resolve(fileEntry)
            };
            fileWriter.onerror = function (e) {
                console.error("[FileService]: Failed file write: " + e.toString());
                reject()
            };
            if (!dataObj) {
                dataObj = new Blob(['File download error'], { type: 'text/plain' });
            }
            fileWriter.write(dataObj);
        });
    })
}

这是我的 package.json

 {
  "name": "testapp",
  "author": "me",
  "homepage": "http://me.com/",
  "private": true,
  "scripts": {
    "clean": "ionic-app-scripts clean",
    "build": "ionic-app-scripts build",
    "ionic:build": "ionic-app-scripts build",
    "ionic:serve": "ionic-app-scripts serve",
    "ionic:watch": "ionic-app-scripts watch"
  },
  "dependencies": {
    "@angular/common": "2.2.1",
    "@angular/compiler": "2.2.1",
    "@angular/compiler-cli": "2.2.1",
    "@angular/core": "2.2.1",
    "@angular/forms": "2.2.1",
    "@angular/http": "2.2.1",
    "@angular/platform-browser": "2.2.1",
    "@angular/platform-browser-dynamic": "2.2.1",
    "@angular/platform-server": "2.2.1",
    "@ionic-native/camera": "^3.6.1",
    "@ionic-native/core": "^3.2.1",
    "@ionic-native/file": "^3.6.1",
    "@ionic-native/file-opener": "^3.6.1",
    "@ionic-native/image-picker": "^3.4.4",
    "@ionic-native/network": "^3.2.1",
    "@ionic/storage": "^1.1.7",
    "@ngx-translate/core": "^6.0.1",
    "@ngx-translate/http-loader": "0.0.3",
    "@types/cordova": "0.0.34",
    "@types/cordova-plugin-device": "0.0.3",
    "@types/cordova.plugins.diagnostic": "^3.4.0",
    "angular2-moment": "^1.2.0",
    "cordova": "^6.5.0",
    "ionic-angular": "2.0.0-rc.5",
    "ionic-native": "^2.9.0",
    "ionicons": "3.0.0",
    "jquery": "^3.1.1",
    "ng2-charts": "^1.5.0",
    "ng2-translate": "^5.0.0"
  },
  "devDependencies": {
    "@ionic-native/diagnostic": "^3.4.3",
    "@ionic/app-scripts": "^1.1.4",
    "angular-translate-loader-static-files": "^2.15.1",
    "typescript": "2.0.9"
  },
  "cordovaPlugins": [
    "cordova-plugin-device@1.1.5",
    "cordova-plugin-splashscreen@4.0.2",
    "cordova-plugin-network-information@1.3.2",
    "cordova-plugin-camera@2.4.0",
    "ionic-plugin-keyboard@~2.2.1",
    "cordova-plugin-whitelist@1.3.1",
    "cordova-plugin-console@1.0.5",
    "cordova-plugin-statusbar@2.2.1",
    "cordova-sqlite-storage@~2.0.2",
    "cordova-plugin-file",
    "cordova-plugin-inappbrowser@~1.7.0",
    "cordova-plugin-file-opener2",
    "cordova-plugin-image-picker@~1.1.1"
  ],
  "cordovaPlatforms": [],
  "description": "testapp"
}
4

0 回答 0