通过Webclient上传文件到Box的API v2

本文关键字:Box API v2 文件 Webclient 通过 | 更新日期: 2023-09-27 17:50:31

我正在使用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步骤中没有看到任何内容。

任何想法?谢谢你!

通过Webclient上传文件到Box的API v2

好了,最后我用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。希望这对你有帮助!