2012-12-04 141 views
3

我正在嘗試使用rest api將文件上傳到box.net。但我每次都收到404錯誤。 這裏請求標題(來自fiddler)。我犯了什麼錯誤?將文件上傳到Box.net

POST https://api.box.com/2.0/files/content HTTP/1.1 
Authorization: BoxAuth api_key={key}&auth_token={tokem} 
Content-Type: multipart/form-data; boundary="13afaf22-f210-464b-bcc3-3cd3e4ed1617" 
Host: api.box.com 
Content-Length: 166 
Expect: 100-continue 

--13afaf22-f210-464b-bcc3-3cd3e4ed1617 
Content-Disposition: form-data; filename=test.zip; folder_id=0 
{empty line - I don't know why it here} 
{bytes starting here} 
--13afaf22-f210-464b-bcc3-3cd3e4ed1617-- 

注意我使用C#與它的HttpClient類和MultiPartFormDataContent作爲內容源。

解決:

問題得到解決。請求頭和身體應該是這樣的:

POST https://api.box.com/2.0/files/content HTTP/1.1 
Authorization: BoxAuth api_key={key}&auth_token={token} 
Content-Type: multipart/form-data; boundary="d174f29b-6def-47db-8519-3da38b21b398" 
Host: api.box.com 
Content-Length: 314 
Expect: 100-continue 

--d174f29b-6def-47db-8519-3da38b21b398 
Content-Disposition: form-data; filename="hello.txt"; name="filename" 
Content-Type: application/octet-stream 

{Bytes} 
--d174f29b-6def-47db-8519-3da38b21b398 
Content-Disposition: form-data; name="folder_id" 

0 
--d174f29b-6def-47db-8519-3da38b21b398-- 

感謝

+1

你可以發佈你的解決方案作爲這個問題的答案嗎? – seanrose

回答

5

好吧,這裏是方法,它上傳文件Box.com如果有人感興趣

我使用的是從類。淨4.5。

public async Task Upload(string authorization, string filename, string parentID) 
    { 
     HttpRequestMessage message = new HttpRequestMessage(); 
     message.Headers.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("BoxAuth", authorization); 


     MultipartFormDataContent content = new MultipartFormDataContent(); 
     StreamContent streamContent = null; 

     streamContent = new StreamContent(new FileStream(localURI, FileMode.Open)); 

     streamContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data") 
     { 
      FileName = "\"" + filename + "\"", 
      Name = "\"filename\"" 
     }; 
     streamContent.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream"); 
     content.Add(streamContent); 

     ByteArrayContent byteContent = new ByteArrayContent(parentID.ToByteArray()); 
     byteContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data") 
     { 
      Name = "\"folder_id\"" 
     }; 

     content.Add(byteContent); 
     message.Method = HttpMethod.Post; 
     message.Content = content; 

     message.RequestUri = new Uri("https://api.box.com/2.0/files/content"); 

     HttpResponseMessage response = null; 

     Task<HttpResponseMessage> t = httpClient.SendAsync(message, cancelationToken); 
     response = await t; 

     if (t.IsCompleted) 
     { 
      if (!response.IsSuccessStatusCode) 
      { 
       if (response.Content != null) 
        Logger.Error(await response.Content.ReadAsStringAsync(), "Box Upload"); 
       else 
        Logger.Error("Error", "Box Upload"); 
      } 
     } 
    } 
+1

謝謝你回來和回答你自己的問題,它確實幫助不太受歡迎的標籤。 – Pomster

+0

當我嘗試上傳大文件(> 25MB)時,這對我來說是失敗的,我在Windows Mobile 8開發中使用此代碼,請告知我可能的原因。 –

+0

這可能是由於HttpClient的寫入超時造成的。 – Vlad