3
votes

I'm trying to upload a file to box.net using rest api. But I'm getting 404 error each time. Here request headers (from fiddler). Where I've made mistake?

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

Note I'm using c# with its HttpClient class and MultiPartFormDataContent as a content source.

SOLVED:

Problem was solved. Request headers and body should look like this:

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

Thanks

1
Can you post your solution as an answer to this question?seanrose

1 Answers

6
votes

Ok, here is method which uploads file to Box.com, if someone interested in.

I'm using classes from .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");
            }
        }
    }