2014-09-25 2 views
0

Я использую PhoneGap для разработки приложения для платформы Windows, Android и iOS.Как получить доступ к изолированному файлу хранилища из HTML или Javascript для Windows Phone и приложения PhoneGap

У меня есть одна проблема и вам нужна экспертная помощь от вас, ребята.

Я создал один плагин для Windows Phone. Плагин в основном загружает изображения с URL-адреса и хранится в изолированной папке хранилища в папке «Загрузка», это работает успешно.

Теперь моя проблема заключается в доступе к изолированным файлам хранения из javascript. например, я загрузил одно изображение и сохранил в изолированном хранилище («Download/logo.png») теперь мне нужно установить это изображение в свой источник изображения html. Например, <img src="ms-appdata:///local/Downloads/logo.png"/>

Но я не смог добиться успеха. несколько способов без удачи.

я, используя следующий код для сохранения файлов в изолированном хранилище.

//This code is working fine for saving image from url to isolated storage 
    IsolatedStorageFile ISF = IsolatedStorageFile.GetUserStoreForApplication(); 
       //Create directory if does not exists 
       if (ISF.DirectoryExists(IMAGE_FOLDER_PATH) == false) 
       { 
        Debug.WriteLine("Directory created"); 
        ISF.CreateDirectory(IMAGE_FOLDER_PATH); 
       } 

       WebClient client = new WebClient(); 
       string modeuleName = hamBurgerMenu[MODULENAME_COLUMN_INDEX]; 
       client.OpenReadCompleted += (s, e) => 
       { 
        if (e.Error == null) 
        { 
         Deployment.Current.Dispatcher.BeginInvoke(() => 
         { 
          using (var isoStore = IsolatedStorageFile.GetUserStoreForApplication()) 
          { 
           string fullPath = Path.Combine(IMAGE_FOLDER_PATH, modeuleName + ".png"); 
           var bi = new BitmapImage(); 
           bi.SetSource(e.Result); 
           var wb = new WriteableBitmap(bi); 
           using (var isoFileStream = isoStore.CreateFile(fullPath)) 
           { 
            var width = wb.PixelWidth; 
            var height = wb.PixelHeight; 
            Extensions.SaveJpeg(wb, isoFileStream, width, height, 0, 100); 
           } 
          } 
         }); 
        } 
       }; 
       client.OpenReadAsync(new Uri(imageURL, UriKind.Absolute)); 

Я попытался следующие решения, но не смог добиться успеха на всех.

<img src="file:///C:|/Data/Users/DefApps/AppData/{9DB..............0CC}/local/Downloads/logo.png"/> 
       <img src="ms-appdata:///local/Downloads/logo.png"/> 
       <img src="ms-appx:///Downloads/logo.png"/> 

Ваши комментарии или предложения были бы высоко оценены! Спасибо & С уважением, Imdadhusen

+0

Вы решили эту проблему? Я столкнулся с тем же ... – eeadev

+1

да. Я разрешил проблему, выполнив много исследований и разработок. См. Ниже решение для указанной проблемы. Надеюсь, что это поможет вам. – imdadhusen

+0

спасибо. Вы можете поделиться своим плагином на github – eeadev

ответ

1

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

Теперь я сохраняю загруженные изображения в локальной папке приложения.

Следующая функция загрузит изображение из живого URL.

private void downloadImage(string imageURL, string[] hamBurgerMenu) 
     { 
      string ext = Path.GetExtension(imageURL.Trim()); 
      try 
      { 
       WebClient client = new WebClient(); 
       client.OpenReadCompleted += (s, e) => 
       { 
        if (e.Error == null) 
        { 
         Deployment.Current.Dispatcher.BeginInvoke(async() => 
         { 
          await saveImage(e.Result, imageURL); 
         }); 
        } 
        else 
        { 
         //Download Image Not Found 
        } 
       }; 
       client.OpenReadAsync(new Uri(imageURL, UriKind.Absolute)); 
      } 
      catch (Exception e) 
      { 
       //Download Error 
      } 
     } 

Теперь я спасаю загруженное изображение, используя ниже функции

// Save a downloaded images to the app’s local folder. 
     public async Task saveImage(Stream photoToSave, string imageURL) 
     { 
      StorageFile photoFile = null; 
      try 
      { 
       string ext = Path.GetExtension(imageURL.Trim()); 
       photoFile = await localFolder.CreateFileAsync(ext, CreationCollisionOption.ReplaceExisting); 
       using (var photoOutputStream = await photoFile.OpenStreamForWriteAsync()) 
       { 
        await photoToSave.CopyToAsync(photoOutputStream); 
       } 
      } 
      catch (Exception e) 
      { 
       //Error while saving file 
      } 
     } 

Теперь мы можем получить доступ к файлу, используя следующий путь на странице или на стороне клиента сценария HTML

Важно: - <APP_ID> например {8A027331-C7348-182D188-8A02473-1247801} следует заменить на свой идентификатор приложения. Это будет 32-значный ключ.

<img src="C:\\Data\\Users\\DefApps\\AppData\\<APP_ID>\\local\\ Mobile.jpg" alt="Mobile.jpg" /> 
+0

Жаль, что нигде не зарегистрировано – eeadev

+1

Правильно, я нашел только одну ссылку, которая помогла мне решить проблему. Вы можете проверить здесь http://suchan.cz/2013/05/image-path-databinding-in-wp8-and-windows-8-apps/ – imdadhusen

+0

можете ли вы получить мою щедрость? Http: // StackOverflow.com/questions/27042339/windowsphone-phonegap-pushnotification-can not-get-uri-after-register-my-devi – eeadev