【问题标题】:How to access isolated storage file from HTML or Javascript for Windows Phone and PhoneGap Application如何从 HTML 或 Javascript 访问 Windows Phone 和 PhoneGap 应用程序的隔离存储文件
【发布时间】:2014-09-25 14:31:34
【问题描述】:

我正在使用 PhoneGap 开发适用于 Windows、Android 和 iOS 平台的应用程序。

我有一个问题,需要你们的专家帮助。

我为 Windows Phone 创建了一个插件。插件基本上是从 URL 下载图像并存储在 Downloads 文件夹内的独立存储文件夹中,这是成功的。

现在我的问题是有没有办法从 javascript 访问隔离的存储文件。例如,我已经下载了一张图片并存储在隔离存储中(“下载/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"/>

您的 cmets 或建议将不胜感激! 感谢和问候, 伊姆达杜森

【问题讨论】:

  • 这个问题你解决了吗?我也面临同样的问题......
  • 是的。经过大量的研发,我已经解决了这个问题。请参阅下面提到的问题的解决方案。希望这会对你有所帮助。
  • 谢谢。你可以在 github 上分享你的插件
  • 你的建议会很棒。我将创建一个用于文件下载的自定义插件并很快保存在隔离存储文件中,并将上传到 github。谢谢你的好建议。

标签: c# windows-phone isolatedstorage phonegap-pushplugin


【解决方案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 页面或客户端脚本中使用以下路径访问文件

重要:- &lt;APP_ID&gt; 例如{8A027331-C7348-182D188-8A02473-1247801} 应替换为您的应用程序 ID。它将是 32 位密钥。

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多