我正在尝试使用C#(ASP.NET)下载远程文件。问题是当我浏览文件下载URL时 - 它完美下载。当我尝试使用WebClient.DownloadData(url)时,我得到“无数据显示”响应。
如果我使用内置的VS2010浏览器浏览,我仍会收到此“错误”消息。
如何下载文件?任何想法?
非常感谢
答案 0 :(得分:0)
这不是你的方面的下载问题,该页面正在引用某些内容,可能是来自会话...因此您需要登录该网站,获取会话,基本上通过无论您通常采取什么步骤来获取文件,以便正确生成/可用。
如果我不得不猜测,我认为他们在你要求的时候会导出到文件系统,所以这是一个临时文件...不是你可以抓住的东西,所以除非你经历过创建它的步骤(似乎这个Export.aspx页面没有这样做),它不会出现,并且它们的错误信息是“无数据显示”。
还有可能他们明确地阻止你阻止任何类型的机器人/泄漏发生......基本上阻止了你正在尝试做的事情。
答案 1 :(得分:0)
许多网站都会根据Referer或User-Agent标头阻止下载。
答案 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);
}