我试图使用C#(ASP.NET)下载远程文件。问题是,当我浏览到文件下载URL - 它完美下载。当我尝试WebClient.DownloadData(url)时,我得到“无数据显示”响应。使用.NET远程文件下载
如果我使用内置的VS2010浏览器浏览,我仍然会收到此“错误”消息。
如何将文件下载?有任何想法吗?
非常感谢
我试图使用C#(ASP.NET)下载远程文件。问题是,当我浏览到文件下载URL - 它完美下载。当我尝试WebClient.DownloadData(url)时,我得到“无数据显示”响应。使用.NET远程文件下载
如果我使用内置的VS2010浏览器浏览,我仍然会收到此“错误”消息。
如何将文件下载?有任何想法吗?
非常感谢
这不是你侧的下载问题,即页面引用的东西,可能是从会议......所以你需要登录到该网站,获得一个会话,基本上执行通常在路由中获取文件的任何步骤,以便正确/可用。
如果我不得不猜测,我认为他们会在你要求时将文件导出到文件系统,所以它是一个临时文件,不是你可以抓取的东西,所以除非你去了通过创建它的步骤(似乎不是这个Export.aspx页面所做的),它不会在那里,它们的错误消息是“没有数据显示”。
也有可能他们明确阻止你,以防止发生任何形式的机器人/瘙痒......基本上阻止你正在尝试做什么。
许多网站将根据Referer或User-Agent标题阻止下载。
我通过获取远程文件作为流解决了这个问题。从那时起,我能够读取/写入响应流。
//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);
}
当我点击我的浏览器(FF)该链接时,我得到“没有数据显示”,所以它可能是基于会话尼克说。 – svick 2010-06-20 16:22:58