2016-03-25 5 views
0

Ich verwende unten Microsoft Graph API-Code zum Hochladen von Dateien auf OneDrive für das Geschäft des derzeit angemeldeten Benutzers. Der Code lädt Notepad .TXT-Dateien in Ordnung und ich kann die Datei richtig mit dem Inhalt öffnen, wie es ist. Wenn es jedoch ein .docx (Word-Dokument) hochlädt, löst es beim Öffnen einen Fehler aus, da die Datei beschädigt ist. Was fehlt mir hier? Referenz verwendet - https://blog.mastykarz.nl/2-practical-tips-office-365-group-files-api/ https://graph.microsoft.io/en-us/docs/api-reference/v1.0/api/item_uploadcontentMicrosoft Graph API-Datei-Upload in Onedrive für Unternehmen

Code:

byte[] filebytes= fileuploadControl.FileBytes; 
using (var client = new HttpClient()) 
{ 
using (var request = new HttpRequestMessage(HttpMethod.Put, "https://graph.microsoft.com/v1.0/me/drive/root/children/" + filename + "/content")) 
{ 
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", accessToken); 
request.Headers.Add("Accept", "application/json;odata.metadata=verbose"); 
request.Content = new StringContent(DecodeFrom64(Convert.ToBase64String(filebytes)),System.Text.Encoding.ASCII, "text/plain"); 
using (HttpResponseMessage response = await client.SendAsync(request)) 
{ 
    if (response.IsSuccessStatusCode) 
         { 
          lblFileUpload.Text = "File uploaded successfully"; 
         } 
        } 
       } 
      } 
static public string DecodeFrom64(string encodedData) 
    { 
     byte[] encodedDataAsBytes = System.Convert.FromBase64String(encodedData); 
     string returnValue = System.Text.ASCIIEncoding.ASCII.GetString(encodedDataAsBytes); 
     return returnValue; 
    } 

Antwort

1

Unten Code funktionierte für mich perfekt. Code

var fileUrl = new Uri("https://graph.microsoft.com/v1.0/me/drive/root/children/" + filename + "/content"); 
        var request = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(fileUrl); 
        request.Method = "PUT"; 
        request.ContentLength = filebytes.Length; 
        request.AllowWriteStreamBuffering = true; 
        //request.Accept = "application/json;odata=verbose"; 
        request.ContentType = "text/plain"; 
        request.Headers.Add("Authorization", "Bearer " + accessToken); 
        System.IO.Stream stream = request.GetRequestStream(); 
        //filestream.CopyTo(stream); 
        stream.Write(filebytes, 0, filebytes.Length); 
        stream.Close(); 

        System.Net.WebResponse response = request.GetResponse(); 
+0

HI Ashish, ich habe den obigen Code ausprobiert, um ein Word-Dokument hochzuladen, aber ich bekomme immer noch den Fehler, dass die Datei beschädigt ist. Könnten Sie mir bitte mitteilen, welcher Wert in der Variable filebytes vorhanden ist? Vielen Dank. – user318197

0

Vorausgesetzt, dass Sie in C# Ich glaube nicht, Sie brauchen, um base64 den Inhalt zuerst zu dekodieren. Haben Sie versucht, den Dekodierungsteil zu entfernen und ihn nur für die Anfrage zu kodieren?

+0

schätzen Sie Ihre schnelle Antwort. Ich habe versucht, unter Code und keiner von ihnen arbeiten // request.Content = new StringContent ((Convert.ToBase64String (filebytes)), System.Text.Encoding.ASCII, "text/plain"); //request.Content = new StreamContent (Filestream, Dateigröße); //request.Content = neuer ByteArrayContent (filebytes, 0, filesize-1); Nicht sicher, wo es speziell mit Office MIME-Typen schief geht. –

+0

Ich erhalte meine Datei von der Datei-Upload-Kontrolle. Ich versuche direkt, die Datei-Bytes oder den Stream zu verwenden, um den Dateiinhalt zu übertragen. –

+0

Ich habe gerade versucht, mit Client, liebern httprequestmessage. client.PutAsync ("https://graph.microsoft.com/v1.0/me/drive/root/children/" + Dateiname + "/ content", neuer StreamContent (filestream))) und eine ungültige Anforderung . –