使用c#从链接下载pdf

时间:2016-07-28 01:21:23

标签: c# pdf download webclient

我有一个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

我要保存的其中一个链接是:https://www.wvmmis.com/WV%20Medicaid%20Provider%20SanctionedExclusion/WV%20Medicaid%20Exclusions%20-%20June%202016.pdf

代码有效,但保存的文件已损坏,无法通过Acrobat reader或任何pdf阅读器打开。

如果您点击上面的链接并保存并将页面本地保存到pdf,那么您可以打开它。所以问题不在于pdf确实已损坏,而是WebClient无法正确保存它。

我是否可以对WebClient进行任何配置,使其正确保存文件,还是有其他方法可以保存文件?

谢谢

2 个答案:

答案 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找到链接,但在我的情况下,我需要通过文本找到它。