3

rest api を使用して box.net にファイルをアップロードしようとしています。しかし、毎回404エラーが発生します。ここでヘッダーをリクエストします(フィドラーから)。私はどこで間違いを犯しましたか?

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

HttpClient クラスと MultiPartFormDataContent をコンテンツ ソースとして c# を使用していることに注意してください。

解決済み:

問題は解決しました。リクエストのヘッダーと本文は次のようになります。

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

ありがとう

4

1 に答える 1

6

OK、誰かが興味を持っている場合は、ファイルを 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");
            }
        }
    }
于 2012-12-05T10:57:24.833 に答える