如何从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
我已经使用以下代码解决了这个问题。发布答案的目的是帮助其他正在搜索答案的人。
现在我正在将下载的图像保存在应用程序的本地文件夹中。
以下功能将从实时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" />