Как сохранить изображения с сервера во внутреннюю память устройства в приложении ionic?

#ionic-framework #ngcordova

#ionic-framework #ngcordova

Вопрос:

Я пробовал использовать большинство плагинов, связанных с файлами cordova, и, наконец, придумал этот код. Выдает сообщение об успешном завершении, но они не отображаются в галерее. Кто-нибудь может помочь с этим, пожалуйста?

     $scope.download = function download(name, contentType, fileLInk) {
ionic.Platform.ready(function() {
  var url = apiServiceBaseUri   fileLInk;
  var targetPath = cordova.file.dataDirectory   'myapp/'   name;
  var trustHosts = false;
  var options = {
    headers: {
      'Authorization': tokenType   ' '   accessToken
    }
  };

  $cordovaFileTransfer.download(url, targetPath, options, trustHosts)
    .then(function(result) {
      var alertPopup = $ionicPopup.alert({
        title: 'File has been downloaded',
      });
      $ionicListDelegate.closeOptionButtons();
    }, function(error) {
      $ionicListDelegate.closeOptionButtons();
      if (error.http_status == 401) {
        $ionicPopup.alert({
          title: 'Oops, Session is expired!',
          template: 'Looks like your session is expired or you logged in from someother device.'
        });
        $ionicHistory.clearCache().then(function() {
          $state.go('start.login');
        });
      }
      var alertPopup = $ionicPopup.alert({
        title: 'Sorry, something went wrong during the request!',
        template: error.data.errors[0].message
      });
    });
});
};
  

Ответ №1:

Вы должны использовать этот плагин после передачи файла

 cordova plugin add cordova-plugin-refresh-gallery
  

и используйте эту функцию при успешном вызове передачи файлов

 $cordovaFileTransfer.download(url, targetPath, options, trustHosts)
    .then(function(result) {
     refreshMedia.refresh(targetPath); 
     //some other things 
  

Мой рабочий код

  $cordovaFileTransfer.download(url, targetPath, {}, true).then(function (result) {
               refreshMedia.refresh(targetPath);
               $scope.fullViewImageDownloadSpiner = false;
               tostService.notify('Image Downloaded', 'top');
           }, function (error) {
               $scope.fullViewImageDownloadSpiner = false;
               tostService.notify('Try Again', 'top');
           }, function (progress) {
               // PROGRESS HANDLING GOES HERE
               //  $timeout(function () {
               //     $scope.downloadProgress = (progress.loaded / progress.total) * 100;
               // })
           });
  

и задайте свой целевой путь как

 var filename = url.split("/").pop();
var targetPath = cordova.file.externalRootDirectory   '/Download/'   filename;
  

Этот плагин обновляет галерею изображений.Когда вы сохраняете изображение на устройстве Android, изображение изображения не отображается в галерее.Этот плагин будет работать

Надеюсь, это решит вашу проблему.. Спасибо 🙂

Комментарии:

1. Спасибо за ответ @Ujjwal kaushik. На самом деле, я тоже пробовал, но безуспешно.

2. Это не так. На самом деле, я установил этот плагин и добавил эту строку в успешный вызов. $cordovaFileTransfer.download(url, TargetPath, options, trustHosts) .then(функция(результат) { refreshMedia.refresh(TargetPath); }, функция(ошибка) { //ошибка идет сюда } });

3. Вот где это должно работать… это то же самое, что и у меня

4. Могу ли я узнать, что вы установили для целевого пути? Я установил значение пути как: var TargetPath = cordova.file.DataDirectory ‘myapp /’ filename; Я думаю, что это работает с cordova.file.externalDataDirectory, но работает только при наличии внешней карты памяти в мобильном телефоне.