2016-07-22 10 views
0

В настоящее время я использую API Pushbullet и загружаю файл.Загрузить файл в Pushbullet в приложении Windows 10 C#

Я могу успешно получить URL загрузки, как указано в docs с помощью этого метода:

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; 
    } 

Проблема заключается в том, когда я пытаюсь загрузить файл. Я в настоящее время использую этот метод:

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; 
    } 

но я получаю ошибку Http 400. Каков правильный способ загрузки файла с использованием multipart/form-data в приложении UWP?

ответ

2

HTTP 400 error указывает Неверный запрос, это означает, что запрос не может быть понят сервером из-за искаженного синтаксиса. Другими словами, запрос, отправленный клиентом, не соответствует правилам сервера.

Давайте посмотрим на document, и мы можем найти в примере запросить он использует следующий параметр:

-F [email protected]

Таким образом, в запросе, нам нужно установить имя для загруженного файла, а имя должно быть «file». Кроме того, в этом запросе нет необходимости использовать токен доступа. Таким образом, вы можете изменить свой код следующим образом:

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; 
} 

Тогда ваш код должен быть в состоянии работать. Вы получите ответ 204 No Content и метод UploadFile вернет true.

+0

Удивительный, он работает сейчас! Спасибо за помощь –