【问题标题】:How to save an image from http client to a specific folder in UWP如何将图像从 http 客户端保存到 UWP 中的特定文件夹
【发布时间】:2021-04-26 18:36:37
【问题描述】:

我有一个小功能可以保存来自 http 客户端的图像,但我有 2 个问题。

  1. 图像保存在 bin 文件夹中,我在创建的项目中有一个名为 photos 的文件夹,我希望将代码保存在其中。

  2. 我想再获取 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 的文件,但覆盖了前一个文件。我想保存所有这些并保存在项目的文件夹中。我该怎么办?欢迎任何建议,谢谢。

【问题讨论】:

  • 尝试将文件名从 "test" 更改为 $"test {id}"
  • 编译后的应用运行时没有“项目”的概念。

标签: c# uwp


【解决方案1】:

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);

您可以检查目录是否存在于循环之外,只检查一次。但是,如果PhotosMyUwpApp 在循环期间被删除,您的程序可能会崩溃。如果你真的想要,你也可以保存Path.GetDirectoryName(photoLocation) 的返回值,以避免调用它两次。

2.

您需要唯一的文件名。最简单的方法是将id 附加到每个文件中,就像 Roy Cohen 在他们的评论中所说:

var photoLocation = Path.Combine(Environment.SpecialFolder.ApplicationData, "MyUwpApp", "Photos", "test", id.ToString());

【讨论】:

  • 谢谢,但是当我运行此程序时,我提供的路径出现权限被拒绝错误。
  • @Megatron213 您可以在 package.appxmainfest 中声明 broadFileSystemAccess capability。这是一项受限功能。可在设置 > 隐私 > 文件系统中配置访问权限。
猜你喜欢
  • 2016-08-04
  • 2016-02-15
  • 2018-07-30
  • 2011-11-08
  • 1970-01-01
  • 1970-01-01
  • 2021-02-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多