0

我正在使用 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"/>

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

4

1 回答 1

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} 应替换为您的应用程序 ID。它将是 32 位密钥。

<img src="C:\\Data\\Users\\DefApps\\AppData\\<APP_ID>\\local\\ Mobile.jpg" alt="Mobile.jpg" />
于 2014-12-02T06:57:42.667 回答