使用.NET远程文件下载

时间:2010-06-20 15:33:13

标签: c# asp.net download

我正在尝试使用C#(ASP.NET)下载远程文件。问题是当我浏览文件下载URL时 - 它完美下载。当我尝试使用WebClient.DownloadData(url)时,我得到“无数据显示”响应。

如果我使用内置的VS2010浏览器浏览,我仍会收到此“错误”消息。

文件链接为:http://www.tase.co.il/TASE/Pages/Export.aspx?sn=he-IL_ds&enumTblType=AllSecurities&Columns=he-IL_Columns&Titles=he-IL_Titles&TblId=0&ExportType=3 (CSV文件)

如何下​​载文件?任何想法?

非常感谢

3 个答案:

答案 0 :(得分:0)

这不是你的方面的下载问题,该页面正在引用某些内容,可能是来自会话...因此您需要登录该网站,获取会话,基本上通过无论您通常采取什么步骤来获取文件,以便正确生成/可用。

如果我不得不猜测,我认为他们在你要求的时候会导出到文件系统,所以这是一个临时文件...不是你可以抓住的东西,所以除非你经历过创建它的步骤(似乎这个Export.aspx页面没有这样做),它不会出现,并且它们的错误信息是“无数据显示”。

还有可能他们明确地阻止你阻止任何类型的机器人/泄漏发生......基本上阻止了你正在尝试做的事情。

答案 1 :(得分:0)

许多网站都会根据Referer或User-Agent标头阻止下载。

  1. 观看“正常工作”下载 Fiddler
  2. 留意您的代码 下载Fiddler
  3. 比较 两个请求
  4. 更新您的请求 匹配“工作”案例。

答案 2 :(得分:0)

我通过将远程文件作为流来解决问题。从那时起,我能够读取/写入响应流。

//The absolute path to your file
string remoteFile = "http://my.cloudfront.net/videos/vehicle_english_v3.mp4";

//The name of the file you want the user to see when they download the file
int pos = remoteFile.LastIndexOf("/") + 1;
string fileName = remoteFile.Substring(pos, remoteFile.Length - pos);

//Obtain your file as a stream
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(remoteFile);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream fileStream = response.GetResponseStream();

//Write the stream to the response
if (fileStream != null && fileStream.CanRead) {
    context.Response.AddHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
    context.Response.ContentType = "application/octet-stream";
    context.Response.ClearContent();
    fileStream.CopyTo(context.Response.OutputStream);
}