c# - 如何将图像从 http 客户端保存到 UWP 中的特定文件夹
问题描述
我有一个小功能可以保存来自 http 客户端的图像,但我有 2 个问题。
图像被保存在 bin 文件夹中,我在创建的项目中有一个名为 photos 的文件夹,我希望将代码保存在其中。
我想再获得 8 张图像而不是覆盖当前图像,因为另一个调用将重写图像。我的代码如下,不同的id会给出不同的图像:
using (var httpClient = new HttpClient())
{
using (var request = new HttpRequestMessage(HttpMethod.Get, url+id))
{
request.Headers.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", result.AccessToken);
using (
Stream contentStream = await (await httpClient.SendAsync(request)).Content.ReadAsStreamAsync(),
stream = new FileStream("test", FileMode.Create, FileAccess.Write))
{
await contentStream.CopyToAsync(stream);
}
}
}
所以结果是一个名为 test 的文件,但覆盖了前一个文件。我想保存所有这些并保存在项目的文件夹中。我该怎么办?欢迎任何建议,谢谢。
解决方案
1.
这样做new FileStream("test", ...)
会打开一个新的文件流,.\test
这不是我们想要的,就像.
你的程序正在执行的目录一样。相反,任何和所有应用程序数据都应该进入Environment.SpecialFolder.ApplicationData\YourApplicationName
:
var photoLocation = Path.Combine(Environment.SpecialFolder.ApplicationData, "MyUwpApp", "Photos", "test");
// Ensure %AppData%\MyUwpApp\Photos exists, if not create it
if (!Directory.Exists(Path.GetDirectoryName(photoLocation))
Directory.CreateDirectory(Path.GetDirectoryName(photoLocation));
stream = new FileStream(photoLocation, FileMode.Create, FileAccess.Write);
您可以检查目录是否存在于循环之外,只检查一次。但是,如果在循环期间被删除Photos
或被删除,您的程序可能会崩溃。MyUwpApp
如果你真的想要的话,你也可以保存返回值Path.GetDirectoryName(photoLocation)
,以避免调用它两次。
2.
您需要唯一的文件名。最简单的方法是将 附加id
到每个文件中,就像 Roy Cohen 在他们的评论中所说:
var photoLocation = Path.Combine(Environment.SpecialFolder.ApplicationData, "MyUwpApp", "Photos", "test", id.ToString());
推荐阅读
- html - Angular dom sanitize 无法正常工作
- sql - FULL OUTER JOIN 和类似功能
- google-apps-script - 谷歌电子表格 - 根据下拉选择删除单元格
- javascript - Vue-Router:为路由全局添加查询值
- php - phpdismod / phpenmod -s 参数
- java - Java中的抽象方法即使被覆盖也可以具有默认行为吗?
- python - Python - 覆盖现有文件的内容而不创建新文件
- c# - C#将对象作为参数发送到存储过程
- java - Selenium WebDriver:找到同一行上的两个值时,函数不会跳出循环
- node.js - 屏幕录制和网络摄像头(图片中的图片) - NodeJS