繁体   English   中英

离子2-(任何窗口).resolveLocalFileSystemURL()抛出错误

[英]Ionic 2 - (window as any).resolveLocalFileSystemURL() throwing error

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

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"因为它似乎指向问题所在(有一个诺言?还是不使用一个?)。 谢谢。

使用来自离子本机的File类意味着Typescript类不使用javascript 任何类型,请参阅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
  }
);

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));
        });
      });
    });
  }`

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM