【问题标题】:Ionic 2 - (window as any).resolveLocalFileSystemURL() throwing errorIonic 2 - (window as any).resolveLocalFileSystemURL() 抛出错误
【发布时间】:2017-11-12 01:56:24
【问题描述】:

我有一些使用相机的打字稿代码:

this.camera.getPicture(this.optionsGetCamera).then((imageURI) => {
    if (this.platform.is('ios')) {
        this.crop.crop(imageURI, { quality: 100 }).then(newPath => {
            console.log(newPath);
            (window as any).resolveLocalFileSystemURL(newPath, function (fileEntry) {
                 this.readFile(fileEntry);
            });
        }).catch((error) => { ...

当我运行应用程序并使用此代码中使用的相机功能时,我在控制台中收到错误(我正在使用 -lc 参数查看日志的设备上运行):

console.error: ERROR -> {"line":58535,"column":81,"sourceURL":"http://192.168.1.131:8100/build/main.js","__zone_symbol__currentTask":{"type":"microTask","state":"notScheduled","source":"Promise.then","zone":"angular","cancelFn":null,"runCount":0}}

line 58535是这个:

window.resolveLocalFileSystemURL(newPath, function (fileEntry) {

这一行位于由 ionic 在构建时创建的 main.js 文件中。我一直在尝试理解"source":"Promise.then",因为它似乎可能指向问题(有承诺?还是不使用?)。谢谢。

【问题讨论】:

    标签: javascript file typescript ionic-framework window


    【解决方案1】:

    使用 ionic native 的 File 类意味着 Typescript 类 不要使用 javascript any 类型 参考https://ionicframework.com/docs/native/file/

    import {Component} from '@angular/core';
    import {File} from 'ionic-native';
    
    ...
    
    File.listDir(cordova.file.applicationDirectory, 
    'mySubFolder/mySubSubFolder').then(
      (files) => {
        // do something
      }
    ).catch(
      (err) => {
        // do something
      }
    );
    

    【讨论】:

    • 感谢您的回复!我将如何设置它以使 file:///var/mobile/Containers/Data/Application/57AFE969-7A54-4066-BFF7-AFEB0C6BFEB6/ 成为我要为其列出文件的文件夹?
    • 其实我想我只是想通了...我使用"file:///" 用于文件系统和var/mobile/Containers/Data/Application/57AFE969-7A54-4066-BFF7-AFEB0C6BFEB6/ 用于文件夹。
    • 首选使用环境文件夹,如Environment.SpecialFolder.<folderName> +'您的自定义文件夹名称'
    • var/mobile/Containers/Data/Application/57AFE969-7A54-4066-BF‌​F7-AFEB0C6BFEB6/?那是在什么环境/特殊文件夹中?
    【解决方案2】:

    cordova plugin add cordova-plugin-file我的代码为我工作

        getMedia(): Promise<any> {
            return new Promise((resolve, reject) => {
              Camera.getPicture(this.options).then((fileUri: any) => {
                alert('File URI: ' + JSON.stringify(fileUri));
                window.resolveLocalFileSystemURL('file://' + fileUri, (fileEntry) => {
                  alert('Type: ' + (typeof fileEntry));
                  fileEntry.file((file) => {
                    alert('File: ' + (typeof file) + ', ' + JSON.stringify(file));
                    const fileReader = new FileReader();
                    fileReader.onloadend = (result: any) => {
                      alert('File Reader Result: ' + JSON.stringify(result));
                      let arrayBuffer = result.target.result;
                      let blob = new Blob([new Uint8Array(arrayBuffer)], { type: 'video/mp4' });
                      const name = 'mypic'
                      this.upload(blob);
                    };
                    fileReader.onerror = (error: any) => {
                      reject(error);
                    };
                    fileReader.readAsArrayBuffer(file);
                  }, (error) => {
                    alert('File Entry Error: ' + JSON.stringify(error));
                  });
                }, (error) => {
                  alert('Error resolving file: ' + JSON.stringify(error));
                });
              });
            });
          }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多