如何使用PUT使用c#和原始数据上传大文件(没有multipart-formdata)

时间:2015-10-28 00:12:32

标签: c# large-files openstack-swift http-put

我正在使用OpenStack Swift API版本1,并尝试使用Visual Studio 2015中的c#和DotNet 4.5将大文件上传到其对象存储。

创建或替换对象下的 Objects 部分的http://developer.openstack.org/api-ref-objectstorage-v1.html处查看其API文档。

按照他们使用curl的例子,我能够上传一个小测试文件。 Wireshark使用PUT方法显示了一个非常简单的协议,一些标头和原始数据:

curl -X PUT -H "X-Auth-Token: ab2716160b394f6aab337f1ea8e9378f" -H "Content-Length: 10" -H "Content-Type: application/octet-stream" -d "1234567890"  http://10.25.10.10:8080/v1/AUTH_70466e9f789744e8b0169d398b8492cd/Test/test.dat


PUT /v1/AUTH_70466e9f789744e8b0169d398b8492cd/Test/test.dat HTTP/1.1
User-Agent: curl/7.30.0
Host: 10.25.10.10:8080
Accept: */*
X-Auth-Token: ab2716160b394f6aab337f1ea8e9378f
Content-Length: 10
Content-Type: application/octet-stream

1234567890

HTTP/1.1 201 Created
Last-Modified: Tue, 27 Oct 2015 23:52:45 GMT
Content-Length: 0
Etag: e807f1fcf82d132f9bb018ca6738a19f
Content-Type: text/html; charset=UTF-8
X-Trans-Id: txfb6b1300b3834e178f0ae-0056300e4c
Date: Tue, 27 Oct 2015 23:52:44 GMT

DotNet WebClient 在通过 UploadFileAsync 方法上传文件时显然只支持POST,因此不会出现问题。我发现了许多其他上传示例,全部使用 multipart-formdata 和POST。

如何在不必将文件读入缓冲区的情况下创建包含大文件内容的PUT请求?

我感谢任何有关示例或文档的提示或指示!

1 个答案:

答案 0 :(得分:0)

原来 WebClient 有一个方法 UploadFileTaskAsync ,它支持 method 参数,我可以设置为PUT。