2016-07-28 6 views
0

ich eine Windows-Dienst-Anwendung, die PDF-Dateien aus verschiedenen öffentlichen Web-Site herunterladen muss, und speichern Sie sie lokal in einen Ordner auf dem ServerDowload ein pdf von einem Link mit C#

Ich versuchte System.Net zu verwenden. WebClient den Download auszuführen wie diese

client = new WebClient(); 
client.DownloadFile(new Uri(fileLink, UriKind.Absolute), destination); 

Ziel ist der vollständige Pfad und den Namen der Ordner, in dem ich brauche, um die Datei zu speichern. Beispiel: \ Servername \ Downloads \ file123.pdf

Filelink ist die URL der pdf-Datei

Einer der Links, die ich zu retten versuchen ist: https://www.wvmmis.com/WV%20Medicaid%20Provider%20SanctionedExclusion/WV%20Medicaid%20Exclusions%20-%20June%202016.pdf

Der Code funktioniert, aber die Datei Das ist beschädigt und kann nicht mit dem Acrobat Reader oder einem PDF Reader geöffnet werden.

Wenn Sie auf den Link oben klicken und Speichern unter und speichern Sie die Seite lokal in eine PDF, dann können Sie es in Ordnung zu öffnen. Das Problem ist also nicht, dass das PDF wirklich beschädigt ist, aber WebClient speichert es nicht richtig.

Gibt es eine Konfiguration, die ich mit dem WebClient machen kann, die bewirkt, dass die Datei korrekt gespeichert wird, oder gibt es eine andere Möglichkeit, dies richtig zu speichern?

Danke

+0

Überprüfen Sie dies: http://stackoverflow.com/questions/18712224/download-save-locally-and-display-pdf-from-a-link Hoffe, es hilft –

+0

Öffnen Sie die Datei in einem Hex-Editor. Wie sieht es aus? Es ist möglich, dass der Webserver Ihren Benutzeragenten nicht mag und Ihnen stattdessen eine HTML-Seite zur Verfügung stellt. –

Antwort

0

ich vor etwas ähnlich lange Zeit

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()); 
} 
+0

Ich habe Ihren Code mit WebRequest/WebResponse versucht, aber ich kann die Datei immer noch nicht öffnen. Sagt immer noch, dass es beschädigt ist. – user3547425

0

Nach dem Versuch, alle Beispiele schrieb, die ich online ohne Glück gefunden, ich herausgefunden endlich einen Weg, dies zu tun. Ich schreibe hier meine Antwort für den Fall, dass jemand anderes das gleiche Problem hat.

Ich verwendete Selen FireFoxDriver, um zu der Seite zu navigieren, die den Link enthält, dann finde ich den Link und klicke darauf. Ich habe ein Profil in Firefox erstellt, um den Dateityp pdf direkt herunterzuladen, anstatt ihn zu öffnen.

FirefoxDriver driver = new FirefoxDriver(myProfile); 
driver.Navigate().GoToUrl(pageUrl); 
driver.FindElement(By.LinkText(linkText)).Click(); 

Sie können auch den Link von href oder ID finden, aber in meinem Fall musste ich es von Text zu finden.

Verwandte Themen