Проблема с ионной функцией 3 movefile - PullRequest
0 голосов
/ 16 сентября 2018

enter image description here Я пытаюсь использовать функцию moveFile, которая предоставляется из собственного плагина файла, я не могу загрузить скриншоты, так как это частный проект, принадлежащий моей компании, но я постараюсь объяснить столько, сколькоя могу использовать собственный плагин камеры, чтобы делать фотографии, камера работает очень хорошо, и фотографии показываются, но когда я пытаюсь использовать метод плагина собственного файла (moveFile), просто чтобы переместить снятые фотографии в каталог файлов, а не в кеш, ничего не происходит!file и fileError импортируются на странице TS, файл также предоставляется в модуле приложения

Вот мой TS (обновлен):

getImageFromCamera() {
const options: CameraOptions = {
  quality: 20,
  saveToPhotoAlbum: true,
  destinationType: this.camera.DestinationType.FILE_URI,
  sourceType: this.camera.PictureSourceType.CAMERA,
  encodingType: this.camera.EncodingType.JPEG,
  allowEdit: true
};
this.camera.getPicture(options).then((imageData) => {
  this.imageUrl = imageData;
  let imageName = imageData.substr(imageData.lastIndexOf('/') + 1);
  this.file.checkDir(this.file.externalRootDirectory, 'DEMO')
    .then(() => {
      this.fileCreated = true;
    }, (err) => {
    });
  if (this.fileCreated) {
  }
  else {
    this.file.createDir(this.file.externalRootDirectory, "DEMO", true)
      .then((res) => {
      }, (err) => {
      });
  }
  let tempPath = this.imageUrl.substr(0, this.imageUrl.lastIndexOf('/') +1);
  let androidPath = this.file.externalRootDirectory + '/DEMO/';
  this.file.moveFile(tempPath, imageName, androidPath, imageName)
    .then((res) => {
      this.file.readAsDataURL(androidPath, imageName)
        .then((res) => {
          this.images.push(res);
        }, (err) => {
          console.log("Error in Image Get Path---");
          console.log(JSON.stringify(err));
        });
    }, (err) => {
    });
  // this.toDataURL(this.imageUrl, function (dataUrl) {
  //  console.log('RESULT:' + dataUrl);
  //  this.images.push(this.imageUrl);
  // });
 }, (err) => {
  console.log(JSON.stringify(err));
 });
}
toDataURL(url, callback) {
let xhr = new XMLHttpRequest();
xhr.onload = function () {
  let reader = new FileReader();
  reader.onloadend = function () {
    callback(reader.result);
  };
  reader.readAsDataURL(xhr.response);
 };
xhr.open('GET', url);
xhr.responseType = 'blob';
xhr.send();
}

Мой HTML

<ion-item>
  <h5>Choose files to upload</h5>
  <button (tap)="getImageFromCamera()" item-end ion-button round outline 
   color="sideBar">Upload</button>
</ion-item>
<ion-slides *ngIf="images.length >= 1">
  <ion-slide style="float: left;" *ngFor="let image of images; let i = 
   index;" class="image-container">
    <ion-icon (tap)="onDeletePhoto(i)" class="icon-container" name="close- 
     circle"></ion-icon>
    <img [src]="image" width="100">
  </ion-slide>
</ion-slides>
<ion-item>

Как вы можете видеть, я попытался просмотреть 4 параметра на экране с помощью строки photoError, и все выглядит очень хорошо, старый путь верен, имя, новый путь и новое имя верны, но изображениене перемещается из папки с картинками, я обнаружил, что папка с файлами на моем телефоне пуста, а изображение все еще находится в папке с картинками; строка imageUrl также показывает правильный путь к изображению (новый), когда я пытаюсь установитьimageUrl по старому пути, также изображение не отображается, я попробовал приложение на другом устройстве Android, также та же проблема, так что это не с моего телефона.

У кого-нибудь есть идеи?если у вас есть какие-либо вопросы, на которые я не дал ответа, не стесняйтесь спрашивать.

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

здесь я создал демо для вас, этот код берет фотографию с камеры и сохраняет в папку, затем читает это изображение с локального пути и отображает на экране, я также проверил, отлично работает для меня, теперь это должно работать хорошо.

Home.ts

Убедитесь, что вы импортировали все пакеты

import {Component} из '@ angular / core';
импорт {NavController, ToastController} из 'ionic-angular';
импорт {Camera, CameraOptions} из "@ ionic-native / camera";
импорт {File} из '@ ionic-native / file';

export class HomePage {

public imageURI: any;
public imageName: any;
public fileCreated: boolean = false;
public imageString: any;
resultImageArray: any;

конструктор (общедоступный navCtrl: NavController, личный файл: файл, частная камера: камера, частный toastCtrl: ToastController,) {

}

getImageFromCamera() {


    const options: CameraOptions = {
        quality: 20,
        saveToPhotoAlbum: true,
        destinationType: this.camera.DestinationType.FILE_URI,
        sourceType: this.camera.PictureSourceType.CAMERA,
        encodingType: this.camera.EncodingType.JPEG,
        allowEdit: true
    };

    this.camera.getPicture(options).then((imageData) => {
        this.imageURI = imageData;
        this.imageName = imageData.substr(imageData.lastIndexOf('/') + 1);

        // Create a folder in memory location
        this.file.checkDir(this.file.externalRootDirectory, 'ImagesDemo')
            .then(() => {
                this.fileCreated = true;
            }, (err) => {
                console.log("checkDir: Error");
                console.log(JSON.stringify(err));
                this.presentToast("checkDir Failed");
            });
        if (this.fileCreated) {
            this.presentToast("Directory Already exist");
        }
        else {
            this.file.createDir(this.file.externalRootDirectory, "ImagesDemo", true)
                .then((res) => {
                    this.presentToast("Directory Created");
                }, (err) => {
                    console.log("Directory Creation Error:");
                    console.log(JSON.stringify(err));
                });
        }

        //FILE MOVE CODE
        let tempPath = this.imageURI.substr(0, this.imageURI.lastIndexOf('/') + 1);
        let androidPath = this.file.externalRootDirectory + '/ImagesDemo/';
        this.imageString = androidPath + this.imageName;

        this.file.moveFile(tempPath, this.imageName, androidPath, this.imageName)
            .then((res) => {
                this.presentToast("Image Saved Successfully");
                this.readImage(this.imageString);

            }, (err) => {
                console.log("Image Copy Failed");
                console.log(JSON.stringify(err));
                this.presentToast("Image Copy Failed");
            });
        //Complete File Move Code

        this.toDataURL(this.imageURI, function (dataUrl) {
            console.log('RESULT:' + dataUrl);
        });
    }, (err) => {
        console.log(JSON.stringify(err));
        this.presentToast(JSON.stringify(err));
    });
}


presentToast(msg) {
    let toast = this.toastCtrl.create({
        message: msg,
        duration: 2000
    });
    toast.present();
}

toDataURL(url, callback) {
    let xhr = new XMLHttpRequest();
    xhr.onload = function () {
        let reader = new FileReader();
        reader.onloadend = function () {
            callback(reader.result);
        };
        reader.readAsDataURL(xhr.response);
    };
    xhr.open('GET', url);
    xhr.responseType = 'blob';
    xhr.send();
}



readImage(filePath) {
    let tempPath = filePath.substr(0, filePath.lastIndexOf('/') + 1);
    let imageName = filePath.substr(filePath.lastIndexOf('/') + 1);

    this.file.readAsDataURL(tempPath, imageName)
        .then((res) => {
            this.presentToast("Image Get Done");
            this.resultImageArray = res;
        }, (err) => {
            this.presentToast("Image Get Error");
        });
}

}

Home.html

 <button ion-button   item-end icon-start block  (click)="getImageFromCamera()">Click Here</button>


  <ion-card *ngIf=resultImageArray>
<img src="{{resultImageArray}}"/></ion-card>

И теперь мы готовы к работе, просто запустите устройство, у вас будет выводкак вам захочется.

заяц я также прикрепил вывод моего кода.

enter image description here

0 голосов
/ 17 сентября 2018

Обратитесь к этому коду, я сделал движущееся изображение в указанной папке, с этим кодом. хоп это поможет вам ..
вот мой код:

  getImageFromCamera() {

    const options: CameraOptions = {
        quality: 20,
        saveToPhotoAlbum: true,
        destinationType: this.camera.DestinationType.FILE_URI,
        sourceType: this.camera.PictureSourceType.CAMERA,
        encodingType: this.camera.EncodingType.JPEG,
        allowEdit: true
    };

    this.camera.getPicture(options).then((imageData) => {

        this.imageURI = imageData;
        this.imageName = imageData.substr(imageData.lastIndexOf('/') + 1);

        // Create a folder 'DEMO' in memory location of device to store image

        this.file.checkDir(this.file.externalRootDirectory, 'DEMO')
            .then(() => {
                this.fileCreated = true;
            }, (err) => {
                console.log("checkDir: Error");
            });
        if (this.fileCreated) {
            this.presentToast("Directory Already exist");
        }
        else {
            this.file.createDir(this.file.externalRootDirectory, "DEMO", true)
                .then((res) => {
                    this.presentToast("Directory Created");
                }, (err) => {
                    console.log("Directory Creation Error:");
                });
        }

        //FILE MOVE CODE

        let tempPath = this.imageURI.substr(0, this.imageURI.lastIndexOf('/') + 1);
        let androidPath = this.file.externalRootDirectory + '/DEMO/';

        this.file.moveFile(tempPath, this.imageName, androidPath, this.imageName)
            .then((res) => {
                this.presentToast("Image Moved Successfully");

            }, (err) => {
                this.presentToast("Image Moved Failed");
            });
        //Complete File Move Code

        this.toDataURL(this.imageURI, function (dataUrl) {
            console.log('RESULT:' + dataUrl);
        });
    }, (err) => {
        console.log(JSON.stringify(err));
    });

}
 toDataURL(url, callback) {
    let xhr = new XMLHttpRequest();
    xhr.onload = function () {
        let reader = new FileReader();
        reader.onloadend = function () {
            callback(reader.result);
        };
        reader.readAsDataURL(xhr.response);
    };
    xhr.open('GET', url);
    xhr.responseType = 'blob';
    xhr.send();
}
...