私はこのリンクを知っています: 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();
});
});
}
基本的に、ユーザーに見える場所にファイルを保存します。
問題は許可の不足でした。ファイルをダウンロードディレクトリにダウンロードできる作業コードは次のとおりです。
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();
}
});
}
});
}
ファイルをダウンロードディレクトリにダウンロードするには、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)
});
}
それが役に立てば幸い。
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のダウンロードフォルダーに直接保存できます。
このコード-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を使用してください。理解するのは非常に簡単です。ファイルがある元のディレクトリ、ファイルの元の名前、ターゲットディレクトリ、およびその関数内のファイルの新しい名前原則は同じです。