2017-11-30 5 views
0

Wenn ich die .docx-Datei mit 'Drawing Canvas' von VSTS mit WebClient herunterlade, ist das heruntergeladene .docx-Dokument beschädigt. Wenn ich gebrochen, meine ich, dass wir Word-Dokument nicht manuell öffnen können und wir haben folgende Fehlermeldung: "Die Datei ist beschädigt und kann nicht geöffnet werden".WebClient DownloadFile funktioniert nicht, wenn docx-Datei mit Canvas von VSTS heruntergeladen wird

Dies geschieht nur, wenn Word-Datei Canvas enthält und wenn von VSTS heruntergeladen wird?! Wenn ich von TFS2017 herunterlade oder wenn die .docx-Datei kein Canvas enthält, funktioniert alles.

Erstens dachte ich, dass das Problem mit dem Codieren zusammenhängt, also habe ich alle Codierungen getestet, die ich im WebClient gefunden habe. Änderungen an der Codierung konnten das aktuelle Problem nicht beheben.

Außerdem habe ich versucht, die Implementierung so zu ändern, dass wir nicht die Methode DownloadFile verwenden, und stattdessen habe ich Array von Bytes heruntergeladen und basierend auf Bytes erzeugt Word-Dokument. Mit dieser Änderung in der Implementierung haben wir das gleiche Problem wie zuvor.

Dies ist Codebeispiel:

static void Main(string[] args) 
     { 
      var tfsUri = new Uri("https://.../"); 
      var projectCollection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(tfsUri); 
      var workItemStore = projectCollection.GetService<WorkItemStore>(); 
      var workItem = workItemStore.GetWorkItem(2); 
      projectCollection.EnsureAuthenticated(); 
      var credentials = workItemStore.TeamProjectCollection.Credentials; 
      var fileName = "D:\\test_folder\\files\\System.Description.docx"; 
      var uri = workItem.Attachments[0].Uri; 
      using (var request = new WebClient() { Credentials = credentials }) 
      { 
       request.DownloadFile(uri, fileName); 
      } 
     } 

Vielen Dank für Ihre Hilfe, wenn Sie eine Idee haben.

Antwort

1

Dieses Problem wurde nicht von der Zeichenfläche in der docx-Datei verursacht. Die Datei sollte beschädigt sein, auch wenn nur Text in Ihrer docx-Datei vorhanden ist, wenn Sie sie mit Ihrem Code von VSTS herunterladen.

Das Problem hier ist, dass die Authentifizierung zu VSTS ist anders mit TFS, so dass die WebClient-Download-Datei-Anfrage wird tatsächlich 401 beim Download der Datei, da es keine erforderliche Berechtigung zum Herunterladen der Datei haben. Aktualisieren Sie Ihren Code auf folgende und versuchen Sie es dann erneut:

using System; 
    using Microsoft.TeamFoundation.Client; 
    using Microsoft.TeamFoundation.WorkItemTracking.Client; 
    using Microsoft.TeamFoundation.WorkItemTracking.Proxy; 
    using System.IO; 

    namespace GetAdmin 
    { 
     class Program 
     { 
      static void Main(string[] args) 
      { 

       TfsTeamProjectCollection ttpc = new TfsTeamProjectCollection(new Uri("https://xxx.visualstudio.com/")); 
       ttpc.EnsureAuthenticated(); 
       WorkItemStore wistore = ttpc.GetService<WorkItemStore>(); 
       WorkItem wi = wistore.GetWorkItem(111); 
       WorkItemServer wiserver = ttpc.GetService<WorkItemServer>(); 
       string tmppath = wiserver.DownloadFile(wi.Attachments[0].Id); 
       string filename = @"D:\test\test.docx"; 
       File.Copy(tmppath,filename); 
      } 
     } 

} 
+0

Vielen Dank, das war sehr hilfreich :) – Raskolnikov

Verwandte Themen