【问题标题】:Can you download a file from an HttpContent stream from within a Windows Forms Application?您可以从 Windows 窗体应用程序中的 HttpContent 流下载文件吗?
【发布时间】:2021-12-07 10:53:04
【问题描述】:

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

来自 .NET Web 应用程序的代码我想模仿谁的行为:

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 在单独的方法中构建,然后存储为 Session 变量,以便特定于用户,然后在此处访问以进行下载。

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

有没有办法,从接收内容流,我可以在 Windows 窗体应用程序中使用类似的方法下载这个文件?这会很方便,因为访问文件最初需要登录并验证用户身份,因此仅使用文件路径无法正常访问。

【问题讨论】:

    标签: c# visual-studio winforms file-io system.net


    【解决方案1】:

    好吧,根据您要完成的任务,这里有一个从 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);
                    }
                }
            }
    

    【讨论】:

    • 经过进一步研究,我最终使用了类似于您建议的解决方案。使用 (FileStream outputFileStream = new FileStream(path, FileMode.Create)) { response.Content.ReadAsStreamAsync().Result.CopyTo(outputFileStream); }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多