我正在尝试使用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--
由于
答案 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");
}
}
}