您可以从 Windows 表单应用程序中的 HttpContent 流下载文件吗?

Can you download a file from an HttpContent stream from within a Windows Forms Application?

我最近开发了一个 .NET Web 应用程序,它从我们网络上的某个特定位置下载 zip 文件。我通过检索内容流然后通过返回 File() 将其传递回视图来做到这一点。

我要模拟其行为的 .NET Web App 代码:

public async Task<ActionResult> Download()
    {
        try
        {
            HttpContent content = plan.response.Content;
            var contentStream = await content.ReadAsStreamAsync(); // get the actual content stream

            if (plan.contentType.StartsWith("image") || plan.contentType.Contains("pdf"))
                return File(contentStream, plan.contentType);

            return File(contentStream, plan.contentType, plan.PlanFileName);
        }
        catch (Exception e)
        {
            return Json(new { success = false });
        }
    }

plan.response在单独的方法中构建,然后存储为会话变量,以便它特定于用户,然后在此处访问以供下载。

我现在正在开发一个 Windows 表单应用程序,它需要能够从同一位置访问和下载这些文件。我能够检索响应内容,但我不知道如何继续才能在 Windows 表单应用程序中下载 zip。

有没有一种方法可以通过接收内容流,在 Windows Form App 中使用类似的方法下载此文件?这将很方便,因为访问文件最初需要登录并验证用户身份,因此不能仅通过文件路径正常访问。

好吧,根据您要完成的目标,这里有一个非常简单的示例,从 URL 下载文件并将其保存在本地:

        string href = "https://www.learningcontainer.com/wp-content/uploads/2020/05/sample-zip-file.zip";
        WebRequest request = WebRequest.Create(href);
        using (WebResponse response = request.GetResponse())
        {
            using (Stream dataStream = response.GetResponseStream())
            {
                Uri uri = new Uri(href);
                string fileName = Path.GetTempPath() + Path.GetFileName(uri.LocalPath);
                using (FileStream fs = new FileStream(fileName, FileMode.OpenOrCreate))
                {
                    dataStream.CopyTo(fs);
                }
            }
        }