web-dev-qa-db-ja.com

Ionic 3を使用してダウンロードディレクトリにファイルを保存する

私はこのリンクを知っています: https://cordova.Apache.org/docs/en/latest/reference/cordova-plugin-file/#where-to-store-files

しかし、ダウンロードディレクトリにファイルを保存したいと思います。 Ionicを使用して任意のパスにファイルを保存することは可能ですか?その場合は、例を共有してください。

コードは次のとおりです。

downloadImage(image) {

this.platform.ready().then(() => {

  const fileTransfer: TransferObject = this.transfer.create();

  const imageLocation = `${cordova.file.applicationDirectory}www/assets/img/${image}`;

  fileTransfer.download(imageLocation, cordova.file.externalDataDirectory + image).then((entry) => {

    const alertSuccess = this.alertCtrl.create({
      title: `Download Succeeded!`,
      subTitle: `${image} was successfully downloaded to: ${entry.toURL()}`,
      buttons: ['Ok']
    });

    alertSuccess.present();

  }, (error) => {

    const alertFailure = this.alertCtrl.create({
      title: `Download Failed!`,
      subTitle: `${image} was not successfully downloaded. Error code: ${error.code}`,
      buttons: ['Ok']
    });

    alertFailure.present();

  });

});

}

基本的に、ユーザーに見える場所にファイルを保存します。

6
bambaniasz

問題は許可の不足でした。ファイルをダウンロードディレクトリにダウンロードできる作業コードは次のとおりです。

async downloadFile() {
  await this.fileTransfer.download("https://cdn.pixabay.com/photo/2017/01/06/23/21/soap-bubble-1959327_960_720.jpg", this.file.externalRootDirectory + 
  '/Download/' + "soap-bubble-1959327_960_720.jpg");
}

getPermission() {
  this.androidPermissions.hasPermission(this.androidPermissions.PERMISSION.READ_EXTERNAL_STORAGE)
    .then(status => {
      if (status.hasPermission) {
        this.downloadFile();
      } 
      else {
        this.androidPermissions.requestPermission(this.androidPermissions.PERMISSION.READ_EXTERNAL_STORAGE)
          .then(status => {
            if(status.hasPermission) {
              this.downloadFile();
            }
          });
      }
    });
}
5
bambaniasz

ファイルをダウンロードディレクトリにダウンロードするには、Cordova FileおよびFileTransfer Pluginsを使用する必要があります。

import { File } from '@ionic-native/file';
import { FileTransfer } from '@ionic-native/file-transfer';

constructor(private transfer: FileTransfer) { }

fileTransfer: FileTransferObject = this.transfer.create();

//Use your File Url and name

downloadFile(file) {
  // Some Loading
  this.fileTransfer.download(url, this.file.externalRootDirectory + 
  '/Download/' + file).then(response => {
  console.log(response);
  this.dismissLoading();
  this.presentToast('File has been downloaded to the Downloads folder. View 
  it..')
  })
  .catch(err => {
    this.dismissLoading();
    console.log(err)
  });
}

それが役に立てば幸い。

4
fiza khan
import { File } from '@ionic-native/file';
import { FileTransfer } from '@ionic-native/file-transfer';
constructor(private file: File, private transfer: FileTransfer){}

let link = 'url_to_download_file';
let path = '';
let dir_name = 'Download'; // directory to download - you can also create new directory
let file_name = 'file.txt'; //any file name you like

const fileTransfer: FileTransferObject = this.transfer.create();
let result = this.file.createDir(this.file.externalRootDirectory, dir_name, true);
result.then((resp) => {
  path = resp.toURL();
  console.log(path);
  fileTransfer.download(link, path + file_name).then((entry) => {
    console.log('download complete: ' + entry.toURL());
  }, (error) => {
    console.log(error)
  });
}, (err) => {
  console.log('error on creating path : ' + err);
});

これが遅いことは知っていますが、FileTransferプラグインには常に問題があります。たぶんそれは私だけです。代わりに、FileプラグインのwriteFile()メソッドで成功しました。

私はまだiOSで作業していますが、Androidの場合はここにあります:

import { File } from "@ionic-native/file";

constructor(private fileSystem: File) {}

次に、ファイルを保存するロジックを持っている関数に、次のものがあります。

let path = this.fileSystem.externalRootDirectory + '/Download/'; // for Android
let filename = 'myNewFile.pdf';
this.fileSystem.writeFile(path, filename, File, { replace: true }).then(() => {
        this.toastCtrl.showToast('File has been downloaded. Please check your downloads folder.');
    }, (err) => {
        alert("Sorry. An error occurred downloading the file: " + err);
    }
);

私が言ったように、私はまだiOSに使用するパスを探しています。そして、ダウンロードが実際にダウンロードフォルダーに移動したときに通常表示される通知をポップアップする方法を疑問に思っています。しかし、少なくともAndroidのダウンロードフォルダーに直接保存できます。

1
mateotherock

このコード-ionic 3コンデンサ-josh moronyからtmpディレクトリから写真を撮り、FileSystem APIを使用してこのセクションのDocumentディレクトリに書き込み、パスを取得および操作します

        Filesystem.writeFile({
            data: result.data,
            path: fileName,
            directory: FilesystemDirectory.Data
        })



getFromPhotos() {

  let options = {
  resultType: CameraResultType.Uri
  };

  Camera.getPhoto(options).then(

(photo) => {

    Filesystem.readFile({
        path: photo.path
    }).then((result) => {

        // let date = new Date(),
        // time = date.getTime(),
        time = 'bilder',
            fileName = time + '.jpeg';

        Filesystem.writeFile({
            data: result.data,
            path: fileName,
            directory: FilesystemDirectory.Data
        }).then((result) => {
            Filesystem.getUri({
                directory: FilesystemDirectory.Data,
                path: fileName
            }).then((result) => {
                console.log(result);
              let path = result.uri.replace('file://', '_capacitor_');
              this.image = this.sanitizer.bypassSecurityTrustResourceUrl(path);
            }, (err) => {
                console.log(err);
            });

        }, (err) => {
            console.log(err);
        });

    }, (err) => {
        console.log(err);
    });

}, (err) => {
    console.log(err);
}

);

}

ionic 3でCordova Fileプラグインを使用する必要があります。Googleを使用してください。理解するのは非常に簡単です。ファイルがある元のディレクトリ、ファイルの元の名前、ターゲットディレクトリ、およびその関数内のファイルの新しい名前原則は同じです。

0
Ed Die