2016-07-22 21 views
0

Ich verwende derzeit Pushbullet API und muss eine Datei hochladen.Datei in Pushbullet in Windows 10 App hochladen C#

Ich kann erfolgreich eine Upload-URL erhalten, wie in den docs mit dieser Methode angegeben:

public static async Task<Uploads> GetUploadUrl(string file_name, string file_type) 
    { 
     using (var client = new HttpClient()) 
     { 
      client.DefaultRequestHeaders.Add("Access-Token", AccessToken); 

      var json = new JObject 
      { 
       ["file_name"] = file_name, 
       ["file_type"] = file_type 
      }; 

      var result = await client.PostAsync(new Uri(_uploadUrl, UriKind.RelativeOrAbsolute), new HttpStringContent(json.ToString(), UnicodeEncoding.Utf8, "application/json")); 
      if (result.IsSuccessStatusCode) 
      { 
       var textresult = await result.Content.ReadAsStringAsync(); 
       return JsonConvert.DeserializeObject<Uploads>(textresult); 
      } 
     } 

     return null; 
    } 

Das Problem ist, wenn ich versuche, um die Datei zu laden. Ich verwende derzeit diese Methode:

public static async Task<bool> UploadFile(StorageFile file, string upload_url) 
    { 
     try 
     { 
      System.Net.Http.HttpClient client = new System.Net.Http.HttpClient(); 
      var content = new MultipartFormDataContent(); 
      if (file != null) 
      { 
       var streamData = await file.OpenReadAsync(); 
       var bytes = new byte[streamData.Size]; 
       using (var dataReader = new DataReader(streamData)) 
       { 
        await dataReader.LoadAsync((uint)streamData.Size); 
        dataReader.ReadBytes(bytes); 
       } 
       var streamContent = new ByteArrayContent(bytes); 
       content.Add(streamContent); 
      } 
      client.DefaultRequestHeaders.Add("Access-Token", AccessToken); 
      var response = await client.PostAsync(new Uri(upload_url, UriKind.Absolute), content); 
      if (response.IsSuccessStatusCode) 
       return true; 
     } 
     catch { return false; } 

     return false; 
    } 

aber ich bekomme einen Http 400 Fehler. Was ist der richtige Weg, um eine Datei mit multipart/form-data in einer UWP App hochzuladen?

Antwort

2

HTTP 400 error zeigt an Ungültige Anforderung, bedeutet dies, dass die Anfrage wegen fehlerhafter Syntax vom Server nicht verstanden werden konnte. Mit anderen Worten, die vom Client gesendete Anforderung folgt nicht den Serverregeln.

die am document aussehen lassen, und wir können in dem Beispiel verlangen sie verwendet folgende Parameter finden:

-F [email protected]

So in der Anfrage, die wir brauchen um den Namen für die hochgeladene Datei festzulegen, und der Name sollte "Datei" sein. Außerdem muss in dieser Anfrage kein Zugriffstoken verwendet werden. So können Sie Ihren Code wie folgt ändern:

public static async Task<bool> UploadFile(StorageFile file, string upload_url) 
{ 
    try 
    { 
     System.Net.Http.HttpClient client = new System.Net.Http.HttpClient(); 
     var content = new MultipartFormDataContent(); 
     if (file != null) 
     { 
      var streamData = await file.OpenReadAsync(); 
      var bytes = new byte[streamData.Size]; 
      using (var dataReader = new DataReader(streamData)) 
      { 
       await dataReader.LoadAsync((uint)streamData.Size); 
       dataReader.ReadBytes(bytes); 
      } 
      var streamContent = new ByteArrayContent(bytes); 
      content.Add(streamContent, "file"); 
     } 
     //client.DefaultRequestHeaders.Add("Access-Token", AccessToken); 
     var response = await client.PostAsync(new Uri(upload_url, UriKind.Absolute), content); 
     if (response.IsSuccessStatusCode) 
      return true; 
    } 
    catch { return false; } 

    return false; 
} 

Dann sollte Ihr Code in der Lage zu arbeiten. Sie erhalten eine 204 No Content Antwort und UploadFile Methode wird true zurückgeben.

+0

Super, es funktioniert jetzt! Danke für die Hilfe –