【问题标题】:Download file from virtual URL using c# [duplicate]使用c#从虚拟URL下载文件[重复]
【发布时间】:2017-04-05 22:09:31
【问题描述】:

我想从虚拟路径下载文件。

http://localhost:60181/DocTemplates/Forms/HO/test.pdf

文件将用于动态扩展意味着它可能是 pdf 文件或文档。

我想用字节流下载文件是指先将文件转换成字节流,然后再下载。

点击超链接后下载以上文件。

我不知道怎么做这个任务,请给我建议。

谢谢。

【问题讨论】:

  • 你已经尝试过什么来解决这个问题?例如。提供一些代码sn -p
  • 我怀疑您的实际问题与您输入的内容完全相反。你不想从 URL 下载任何东西,你想创建一个控制器,当 他们 发送请求时将文件发送到客户端。您可以通过简单的File(somePath) 调用返回一个 FileResult。您需要设置路由配置,以便控制器之后的任何内容都映射到参数。例如,如果您的控制器是 FormsController,您可以创建一个路由来将 URL 的其余部分映射到一个参数,或者将部分分离到单独的参数
  • 很多关于如何返回文件的问题,还有更多关于如何设置路由的问题。

标签: c# asp.net-mvc


【解决方案1】:

我在你的控制器中使用了一些简单的东西,比如 Web 客户端。

System.Net.WebClient client = new WebClient();
client.DownloadFile("url", "directory + filename");

只需指定要下载的文件的url,然后指定要保存文件的目录和文件名。

然后,您可以对控制器中的文件做任何您想做的事情。

你也可以试试:

using (FileStream fs = File.OpenRead(path))
{
   int length = (int)fs.Length;
   byte[] buffer;

   using (BinaryReader br = new BinaryReader(fs))
   {
       buffer = br.ReadBytes(length);
   }

   Response.Clear();
   Response.Buffer = true;
   Response.AddHeader("content-disposition",        String.Format("attachment;filename={0}", Path.GetFileName(path)));
   Response.ContentType = "application/" +     Path.GetExtension(path).Substring(1);
   Response.BinaryWrite(buffer);
   Response.End();
}

【讨论】:

  • 我想将路径转换为二进制流并下载它。
  • 为什么要自己转成二进制流,竟然是在不知不觉中使用API​​完成的?
【解决方案2】:
using (var client = new WebClient())
{
    var content = client.DownloadData(url);
    using (var stream = new MemoryStream(content))
    {
        ...
    }
} 

也许你正在寻找这个

【讨论】:

  • 请写完整的代码。
猜你喜欢
  • 1970-01-01
  • 2021-09-27
  • 1970-01-01
  • 1970-01-01
  • 2023-03-23
  • 2019-12-16
  • 1970-01-01
  • 2018-02-14
  • 1970-01-01
相关资源
最近更新 更多