我有一个Windows服务应用程序需要从不同的公共网站下载pdf文件并将它们本地保存到服务器上的文件夹
我尝试使用System.Net.WebClient来执行此类下载
client = new WebClient();
client.DownloadFile(new Uri(fileLink, UriKind.Absolute), destination);
destination是我需要将文件保存到的文件夹的完整路径和名称。示例:\ server-name \ downloads \ file123.pdf
fileLink是pdf文件的URL
代码有效,但保存的文件已损坏,无法通过Acrobat reader或任何pdf阅读器打开。
如果您点击上面的链接并保存并将页面本地保存到pdf,那么您可以打开它。所以问题不在于pdf确实已损坏,而是WebClient无法正确保存它。
我是否可以对WebClient进行任何配置,使其正确保存文件,还是有其他方法可以保存文件?
谢谢
答案 0 :(得分:0)
我很久以前写过类似的东西
try
{
WebRequest request = WebRequest.Create(url);
WebResponse response = request.GetResponse();
string originalFileName = response.ResponseUri.AbsolutePath.Substring(response.ResponseUri.AbsolutePath.LastIndexOf("/") + 1);
Stream streamWithFileBody = response.GetResponseStream();
using (Stream output = File.OpenWrite(@"C:\MyPath\" + originalFileName))
{
streamWithFileBody.CopyTo(output);
}
Console.WriteLine("Downloded : " + originalFileName);
}
catch (Exception ex)
{
Console.WriteLine("Unable to Download : " + ex.ToString());
}
答案 1 :(得分:0)
在尝试了我在网上找到的没有运气的所有例子之后,我终于找到了一种方法来做到这一点。我在这里发布我的答案,以防其他人遇到同样的问题。
我使用selenium FireFoxDriver导航到包含该链接的页面,然后找到该链接并单击它。我在firefox中创建了一个配置文件,直接下载文件类型pdf而不是打开它。
FirefoxDriver driver = new FirefoxDriver(myProfile);
driver.Navigate().GoToUrl(pageUrl);
driver.FindElement(By.LinkText(linkText)).Click();
您也可以通过href或id找到链接,但在我的情况下,我需要通过文本找到它。