2016-07-22 84 views
0

我目前使用Pushbullet API並需要上傳文件。將文件上傳到Windows 10應用程序c中的Pushbullet#

因爲使用這種方法在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錯誤。在UWP應用程序中使用multipart/form-data上傳文件的正確方法是什麼?

回答

2

HTTP 400 error表示錯誤請求,則意味着該請求無法被服務器因爲語法錯誤的理解。換句話說,客戶端發送的請求並不遵循服務器的規則。

讓我們來看看document,我們可以在這個例子中找到要求它採用下列參數:

-F [email protected]

所以在要求,我們需要爲上傳的文件設置名稱,名稱應該是「文件」。另外,在這個請求中,不需要使用訪問令牌。所以你可以改變你的代碼如下:

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

太棒了,它現在有用!謝謝您的幫助 –

相關問題