将文件上传到Box.net

时间:2012-12-04 20:56:13

标签: c# box-api

我正在尝试使用rest api将文件上传到box.net。但我每次都会收到404错误。 这里请求标题(来自fiddler)。哪里弄错了?

 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 个答案:

答案 0 :(得分:5)

好的,这是将文件上传到Box.com的方法,如果有人对此感兴趣的话。

我正在使用.net 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");
            }
        }
    }