Saving file to Downloads directory using Ionic 3












4















i know this link: https://cordova.apache.org/docs/en/latest/reference/cordova-plugin-file/#where-to-store-files



but i would like to save the file in Downloads directory. Is this possible to save the file in any path using Ionic? If so, please, share the example.



Here's the code:



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();

});

});

}


Basically I want save the file in location that is visible to the user.










share|improve this question





























    4















    i know this link: https://cordova.apache.org/docs/en/latest/reference/cordova-plugin-file/#where-to-store-files



    but i would like to save the file in Downloads directory. Is this possible to save the file in any path using Ionic? If so, please, share the example.



    Here's the code:



    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();

    });

    });

    }


    Basically I want save the file in location that is visible to the user.










    share|improve this question



























      4












      4








      4


      2






      i know this link: https://cordova.apache.org/docs/en/latest/reference/cordova-plugin-file/#where-to-store-files



      but i would like to save the file in Downloads directory. Is this possible to save the file in any path using Ionic? If so, please, share the example.



      Here's the code:



      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();

      });

      });

      }


      Basically I want save the file in location that is visible to the user.










      share|improve this question
















      i know this link: https://cordova.apache.org/docs/en/latest/reference/cordova-plugin-file/#where-to-store-files



      but i would like to save the file in Downloads directory. Is this possible to save the file in any path using Ionic? If so, please, share the example.



      Here's the code:



      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();

      });

      });

      }


      Basically I want save the file in location that is visible to the user.







      android cordova ionic-framework ionic3






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Mar 1 '18 at 14:21









      EKOlog

      192316




      192316










      asked Mar 1 '18 at 13:50









      bambaniaszbambaniasz

      66110




      66110
























          5 Answers
          5






          active

          oldest

          votes


















          3














          To download the File to the Download directory you need to use Cordova File and 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)
          });
          }


          Hope it helps.






          share|improve this answer
























          • Does this code really works for You? It doesn't for me. I can't save files in this directory. I am only able to save files in file.dataDirectory.

            – bambaniasz
            Jul 23 '18 at 8:08






          • 1





            Yes it works and it saves the files in the Downloads directory. Have you installed ionic file plugin??

            – fiza khan
            Jul 23 '18 at 9:09








          • 1





            Yes it appears in the Downloads directory i have tested this and implemented this code in my app.

            – fiza khan
            Jul 23 '18 at 9:50






          • 1





            Yes you are right this issue appears in the android 6 or greater. For this you need to ask the permission from the user at run time. This can be solved using Android Permissions plugins. Try this code on android version less than 6 and your file will be saved successfully.

            – fiza khan
            Jul 24 '18 at 4:31






          • 1





            Please follow this link stackoverflow.com/questions/46143238/…

            – fiza khan
            Jul 26 '18 at 5:00



















          1














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





          share|improve this answer































            1














            the problem was lack of permission. Here is the working code that can download file to downloads directory:



            downloadFile() {
            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").then()
            }

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





            share|improve this answer































              0














              This code - ionic 3 capacitor - from josh morony takes a photo from the tmp directory and writes to the Document directory in this section using the FileSystem API the retrieves and manipulates the path



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

              );


              }



              In ionic 3 you have to use the cordova File plugin - please google. It is pretty straight forward to understand: you define the original directory where the file is, the original name of the file, the target directory, and a new name for the file inside that function. The principle is the same.






              share|improve this answer































                0














                I know this is late, but I've always had issues with the FileTransfer plugin. Maybe it is just me. I've instead had success with the writeFile() method of the File plugin.



                I'm still working on iOS, but for Android here is what I have:



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

                constructor(private fileSystem: File) {}


                Then, in whatever function you have the logic to save the file, we have:



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


                As I said, I'm still looking out for what path to use for iOS. And I'm still wondering how to pop up the notification that usually comes up when a download actually goes to the download folder. But at least I am able to save directly in the download folder of Android.






                share|improve this answer

























                  Your Answer






                  StackExchange.ifUsing("editor", function () {
                  StackExchange.using("externalEditor", function () {
                  StackExchange.using("snippets", function () {
                  StackExchange.snippets.init();
                  });
                  });
                  }, "code-snippets");

                  StackExchange.ready(function() {
                  var channelOptions = {
                  tags: "".split(" "),
                  id: "1"
                  };
                  initTagRenderer("".split(" "), "".split(" "), channelOptions);

                  StackExchange.using("externalEditor", function() {
                  // Have to fire editor after snippets, if snippets enabled
                  if (StackExchange.settings.snippets.snippetsEnabled) {
                  StackExchange.using("snippets", function() {
                  createEditor();
                  });
                  }
                  else {
                  createEditor();
                  }
                  });

                  function createEditor() {
                  StackExchange.prepareEditor({
                  heartbeatType: 'answer',
                  autoActivateHeartbeat: false,
                  convertImagesToLinks: true,
                  noModals: true,
                  showLowRepImageUploadWarning: true,
                  reputationToPostImages: 10,
                  bindNavPrevention: true,
                  postfix: "",
                  imageUploader: {
                  brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
                  contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
                  allowUrls: true
                  },
                  onDemand: true,
                  discardSelector: ".discard-answer"
                  ,immediatelyShowMarkdownHelp:true
                  });


                  }
                  });














                  draft saved

                  draft discarded


















                  StackExchange.ready(
                  function () {
                  StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f49051139%2fsaving-file-to-downloads-directory-using-ionic-3%23new-answer', 'question_page');
                  }
                  );

                  Post as a guest















                  Required, but never shown

























                  5 Answers
                  5






                  active

                  oldest

                  votes








                  5 Answers
                  5






                  active

                  oldest

                  votes









                  active

                  oldest

                  votes






                  active

                  oldest

                  votes









                  3














                  To download the File to the Download directory you need to use Cordova File and 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)
                  });
                  }


                  Hope it helps.






                  share|improve this answer
























                  • Does this code really works for You? It doesn't for me. I can't save files in this directory. I am only able to save files in file.dataDirectory.

                    – bambaniasz
                    Jul 23 '18 at 8:08






                  • 1





                    Yes it works and it saves the files in the Downloads directory. Have you installed ionic file plugin??

                    – fiza khan
                    Jul 23 '18 at 9:09








                  • 1





                    Yes it appears in the Downloads directory i have tested this and implemented this code in my app.

                    – fiza khan
                    Jul 23 '18 at 9:50






                  • 1





                    Yes you are right this issue appears in the android 6 or greater. For this you need to ask the permission from the user at run time. This can be solved using Android Permissions plugins. Try this code on android version less than 6 and your file will be saved successfully.

                    – fiza khan
                    Jul 24 '18 at 4:31






                  • 1





                    Please follow this link stackoverflow.com/questions/46143238/…

                    – fiza khan
                    Jul 26 '18 at 5:00
















                  3














                  To download the File to the Download directory you need to use Cordova File and 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)
                  });
                  }


                  Hope it helps.






                  share|improve this answer
























                  • Does this code really works for You? It doesn't for me. I can't save files in this directory. I am only able to save files in file.dataDirectory.

                    – bambaniasz
                    Jul 23 '18 at 8:08






                  • 1





                    Yes it works and it saves the files in the Downloads directory. Have you installed ionic file plugin??

                    – fiza khan
                    Jul 23 '18 at 9:09








                  • 1





                    Yes it appears in the Downloads directory i have tested this and implemented this code in my app.

                    – fiza khan
                    Jul 23 '18 at 9:50






                  • 1





                    Yes you are right this issue appears in the android 6 or greater. For this you need to ask the permission from the user at run time. This can be solved using Android Permissions plugins. Try this code on android version less than 6 and your file will be saved successfully.

                    – fiza khan
                    Jul 24 '18 at 4:31






                  • 1





                    Please follow this link stackoverflow.com/questions/46143238/…

                    – fiza khan
                    Jul 26 '18 at 5:00














                  3












                  3








                  3







                  To download the File to the Download directory you need to use Cordova File and 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)
                  });
                  }


                  Hope it helps.






                  share|improve this answer













                  To download the File to the Download directory you need to use Cordova File and 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)
                  });
                  }


                  Hope it helps.







                  share|improve this answer












                  share|improve this answer



                  share|improve this answer










                  answered Jul 13 '18 at 5:27









                  fiza khanfiza khan

                  793419




                  793419













                  • Does this code really works for You? It doesn't for me. I can't save files in this directory. I am only able to save files in file.dataDirectory.

                    – bambaniasz
                    Jul 23 '18 at 8:08






                  • 1





                    Yes it works and it saves the files in the Downloads directory. Have you installed ionic file plugin??

                    – fiza khan
                    Jul 23 '18 at 9:09








                  • 1





                    Yes it appears in the Downloads directory i have tested this and implemented this code in my app.

                    – fiza khan
                    Jul 23 '18 at 9:50






                  • 1





                    Yes you are right this issue appears in the android 6 or greater. For this you need to ask the permission from the user at run time. This can be solved using Android Permissions plugins. Try this code on android version less than 6 and your file will be saved successfully.

                    – fiza khan
                    Jul 24 '18 at 4:31






                  • 1





                    Please follow this link stackoverflow.com/questions/46143238/…

                    – fiza khan
                    Jul 26 '18 at 5:00



















                  • Does this code really works for You? It doesn't for me. I can't save files in this directory. I am only able to save files in file.dataDirectory.

                    – bambaniasz
                    Jul 23 '18 at 8:08






                  • 1





                    Yes it works and it saves the files in the Downloads directory. Have you installed ionic file plugin??

                    – fiza khan
                    Jul 23 '18 at 9:09








                  • 1





                    Yes it appears in the Downloads directory i have tested this and implemented this code in my app.

                    – fiza khan
                    Jul 23 '18 at 9:50






                  • 1





                    Yes you are right this issue appears in the android 6 or greater. For this you need to ask the permission from the user at run time. This can be solved using Android Permissions plugins. Try this code on android version less than 6 and your file will be saved successfully.

                    – fiza khan
                    Jul 24 '18 at 4:31






                  • 1





                    Please follow this link stackoverflow.com/questions/46143238/…

                    – fiza khan
                    Jul 26 '18 at 5:00

















                  Does this code really works for You? It doesn't for me. I can't save files in this directory. I am only able to save files in file.dataDirectory.

                  – bambaniasz
                  Jul 23 '18 at 8:08





                  Does this code really works for You? It doesn't for me. I can't save files in this directory. I am only able to save files in file.dataDirectory.

                  – bambaniasz
                  Jul 23 '18 at 8:08




                  1




                  1





                  Yes it works and it saves the files in the Downloads directory. Have you installed ionic file plugin??

                  – fiza khan
                  Jul 23 '18 at 9:09







                  Yes it works and it saves the files in the Downloads directory. Have you installed ionic file plugin??

                  – fiza khan
                  Jul 23 '18 at 9:09






                  1




                  1





                  Yes it appears in the Downloads directory i have tested this and implemented this code in my app.

                  – fiza khan
                  Jul 23 '18 at 9:50





                  Yes it appears in the Downloads directory i have tested this and implemented this code in my app.

                  – fiza khan
                  Jul 23 '18 at 9:50




                  1




                  1





                  Yes you are right this issue appears in the android 6 or greater. For this you need to ask the permission from the user at run time. This can be solved using Android Permissions plugins. Try this code on android version less than 6 and your file will be saved successfully.

                  – fiza khan
                  Jul 24 '18 at 4:31





                  Yes you are right this issue appears in the android 6 or greater. For this you need to ask the permission from the user at run time. This can be solved using Android Permissions plugins. Try this code on android version less than 6 and your file will be saved successfully.

                  – fiza khan
                  Jul 24 '18 at 4:31




                  1




                  1





                  Please follow this link stackoverflow.com/questions/46143238/…

                  – fiza khan
                  Jul 26 '18 at 5:00





                  Please follow this link stackoverflow.com/questions/46143238/…

                  – fiza khan
                  Jul 26 '18 at 5:00













                  1














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





                  share|improve this answer




























                    1














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





                    share|improve this answer


























                      1












                      1








                      1







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





                      share|improve this answer













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






                      share|improve this answer












                      share|improve this answer



                      share|improve this answer










                      answered Mar 29 '18 at 11:07









                      Gokulraj MahadheeraaGokulraj Mahadheeraa

                      92110




                      92110























                          1














                          the problem was lack of permission. Here is the working code that can download file to downloads directory:



                          downloadFile() {
                          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").then()
                          }

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





                          share|improve this answer




























                            1














                            the problem was lack of permission. Here is the working code that can download file to downloads directory:



                            downloadFile() {
                            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").then()
                            }

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





                            share|improve this answer


























                              1












                              1








                              1







                              the problem was lack of permission. Here is the working code that can download file to downloads directory:



                              downloadFile() {
                              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").then()
                              }

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





                              share|improve this answer













                              the problem was lack of permission. Here is the working code that can download file to downloads directory:



                              downloadFile() {
                              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").then()
                              }

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






                              share|improve this answer












                              share|improve this answer



                              share|improve this answer










                              answered Nov 9 '18 at 12:36









                              bambaniaszbambaniasz

                              66110




                              66110























                                  0














                                  This code - ionic 3 capacitor - from josh morony takes a photo from the tmp directory and writes to the Document directory in this section using the FileSystem API the retrieves and manipulates the path



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

                                  );


                                  }



                                  In ionic 3 you have to use the cordova File plugin - please google. It is pretty straight forward to understand: you define the original directory where the file is, the original name of the file, the target directory, and a new name for the file inside that function. The principle is the same.






                                  share|improve this answer




























                                    0














                                    This code - ionic 3 capacitor - from josh morony takes a photo from the tmp directory and writes to the Document directory in this section using the FileSystem API the retrieves and manipulates the path



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

                                    );


                                    }



                                    In ionic 3 you have to use the cordova File plugin - please google. It is pretty straight forward to understand: you define the original directory where the file is, the original name of the file, the target directory, and a new name for the file inside that function. The principle is the same.






                                    share|improve this answer


























                                      0












                                      0








                                      0







                                      This code - ionic 3 capacitor - from josh morony takes a photo from the tmp directory and writes to the Document directory in this section using the FileSystem API the retrieves and manipulates the path



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

                                      );


                                      }



                                      In ionic 3 you have to use the cordova File plugin - please google. It is pretty straight forward to understand: you define the original directory where the file is, the original name of the file, the target directory, and a new name for the file inside that function. The principle is the same.






                                      share|improve this answer













                                      This code - ionic 3 capacitor - from josh morony takes a photo from the tmp directory and writes to the Document directory in this section using the FileSystem API the retrieves and manipulates the path



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

                                      );


                                      }



                                      In ionic 3 you have to use the cordova File plugin - please google. It is pretty straight forward to understand: you define the original directory where the file is, the original name of the file, the target directory, and a new name for the file inside that function. The principle is the same.







                                      share|improve this answer












                                      share|improve this answer



                                      share|improve this answer










                                      answered Jul 12 '18 at 21:08









                                      Ed DieEd Die

                                      139114




                                      139114























                                          0














                                          I know this is late, but I've always had issues with the FileTransfer plugin. Maybe it is just me. I've instead had success with the writeFile() method of the File plugin.



                                          I'm still working on iOS, but for Android here is what I have:



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

                                          constructor(private fileSystem: File) {}


                                          Then, in whatever function you have the logic to save the file, we have:



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


                                          As I said, I'm still looking out for what path to use for iOS. And I'm still wondering how to pop up the notification that usually comes up when a download actually goes to the download folder. But at least I am able to save directly in the download folder of Android.






                                          share|improve this answer






























                                            0














                                            I know this is late, but I've always had issues with the FileTransfer plugin. Maybe it is just me. I've instead had success with the writeFile() method of the File plugin.



                                            I'm still working on iOS, but for Android here is what I have:



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

                                            constructor(private fileSystem: File) {}


                                            Then, in whatever function you have the logic to save the file, we have:



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


                                            As I said, I'm still looking out for what path to use for iOS. And I'm still wondering how to pop up the notification that usually comes up when a download actually goes to the download folder. But at least I am able to save directly in the download folder of Android.






                                            share|improve this answer




























                                              0












                                              0








                                              0







                                              I know this is late, but I've always had issues with the FileTransfer plugin. Maybe it is just me. I've instead had success with the writeFile() method of the File plugin.



                                              I'm still working on iOS, but for Android here is what I have:



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

                                              constructor(private fileSystem: File) {}


                                              Then, in whatever function you have the logic to save the file, we have:



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


                                              As I said, I'm still looking out for what path to use for iOS. And I'm still wondering how to pop up the notification that usually comes up when a download actually goes to the download folder. But at least I am able to save directly in the download folder of Android.






                                              share|improve this answer















                                              I know this is late, but I've always had issues with the FileTransfer plugin. Maybe it is just me. I've instead had success with the writeFile() method of the File plugin.



                                              I'm still working on iOS, but for Android here is what I have:



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

                                              constructor(private fileSystem: File) {}


                                              Then, in whatever function you have the logic to save the file, we have:



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


                                              As I said, I'm still looking out for what path to use for iOS. And I'm still wondering how to pop up the notification that usually comes up when a download actually goes to the download folder. But at least I am able to save directly in the download folder of Android.







                                              share|improve this answer














                                              share|improve this answer



                                              share|improve this answer








                                              edited Nov 15 '18 at 3:50









                                              jdv

                                              1,70931930




                                              1,70931930










                                              answered Nov 14 '18 at 17:27









                                              mateotherockmateotherock

                                              357




                                              357






























                                                  draft saved

                                                  draft discarded




















































                                                  Thanks for contributing an answer to Stack Overflow!


                                                  • Please be sure to answer the question. Provide details and share your research!

                                                  But avoid



                                                  • Asking for help, clarification, or responding to other answers.

                                                  • Making statements based on opinion; back them up with references or personal experience.


                                                  To learn more, see our tips on writing great answers.




                                                  draft saved


                                                  draft discarded














                                                  StackExchange.ready(
                                                  function () {
                                                  StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f49051139%2fsaving-file-to-downloads-directory-using-ionic-3%23new-answer', 'question_page');
                                                  }
                                                  );

                                                  Post as a guest















                                                  Required, but never shown





















































                                                  Required, but never shown














                                                  Required, but never shown












                                                  Required, but never shown







                                                  Required, but never shown

































                                                  Required, but never shown














                                                  Required, but never shown












                                                  Required, but never shown







                                                  Required, but never shown







                                                  這個網誌中的熱門文章

                                                  Xamarin.form Move up view when keyboard appear

                                                  Post-Redirect-Get with Spring WebFlux and Thymeleaf

                                                  Anylogic : not able to use stopDelay()