如何从Windows Phone和PhoneGap应用程序的HTML或Javascript访问独立存储文件

本文关键字:HTML Javascript 访问 存储文件 独立 应用程序 Windows Phone PhoneGap | 更新日期: 2023-09-27 18:24:33

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

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

我已经为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

如何从Windows Phone和PhoneGap应用程序的HTML或Javascript访问独立存储文件

我已经使用以下代码解决了这个问题。发布答案的目的是帮助其他正在搜索答案的人。

现在我正在将下载的图像保存在应用程序的本地文件夹中。

以下功能将从实时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>,例如{8A02731-C7348-182D188-8A02473-1247801}应替换为您的应用程序ID。它将是32位密钥。

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