0

我正在使用 Box API v2,我尝试使用 WebClient 上传文件但没有成功。

从 API:

curl https://upload.box.com/api/2.0/files/content \
-H "Authorization: Bearer ACCESS_TOKEN" -X POST \
-F attributes='{"name":"tigers.jpeg", "parent":{"id":"11446498"}}' \
-F file=@myfile.jpg

所以我用 C# 写了它:

using (WebClient client = new WebClient())
        {
            client.Headers.Add("Authorization", "Bearer " + Utils.GetAccessTokenFromFile());
            client.Headers.Set("Content-Type", "multipart/form-data; boundary=-handeptrai---");
            NameValueCollection values = new NameValueCollection() { 
                {"attributes","{\"name\":\"test.txt\", \"parent\":{\"id\":\"0\"}}"},
                {"file",@Utils.TestFilePath}
            };
            byte[] result = client.UploadValues("https://upload.box.com/api/2.0/files/content", "POST", values);
            string json = Encoding.UTF8.GetString(result);
        }

当我尝试调试以查看发生了什么时,我在 UploadValues 步骤中什么也没看到。

任何想法?谢谢!

4

1 回答 1

2

好的,最后我用 HttpClient 和 MultipartFormDataContent 解决了上传问题,这是上传文本文件的最终代码:

        var client = new HttpClient();
        var content = new MultipartFormDataContent();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer " + Utils.GetAccessTokenFromFile());
        content.Add(new StreamContent(File.Open(Utils.AnyFilePath, FileMode.Open)), "token", "test.txt");
        content.Add(new StringContent("{\"name\":\"test.txt\", \"parent\":{\"id\":\"0\"}}"), "attributes");
        var result = await client.PostAsync("https://upload.box.com/api/2.0/files/content", content);
        result.EnsureSuccessStatusCode();
        string sContent = await result.Content.ReadAsStringAsync();

然后 sContent 将是包含上传文件详细信息的 json。希望这有帮助!

于 2015-05-25T04:19:45.120 回答