簡體   English   中英

如何從HTML或Javascript訪問Windows Phone和PhoneGap應用程序的隔離存儲文件

[英]How to access isolated storage file from HTML or Javascript for Windows Phone and PhoneGap Application

我正在使用PhoneGap開發適用於Windows,Android和iOS平台的應用程序。

我有一個問題,需要你們的專家協助。

我為Windows Phone創建了一個插件。 插件基本上是從URL下載圖像,並存儲在Downloads文件夾內的獨立存儲文件夾中,此文件夾可以成功運行。

現在我的問題是,有沒有辦法從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

我已使用以下代碼解決了該問題。 發布答案的目的是可以幫助正在搜索相同內容的其他人。

現在,我將下載的圖像保存在應用程序的本地文件夾中。

以下功能將從實時網址下載圖像。

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}應該替換為您的應用程序ID。 這將是32位數字的密鑰。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM