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

How to use PUT to upload a large file using c# and raw data (no multipart-formdata)

我正在使用 OpenStack Swift API 版本 1,并尝试使用 [=36] 中的 c# 和 DotNet 4.5 将大文件上传到他们的 object 存储=] 2015.

Objects 部分的 http://developer.openstack.org/api-ref-objectstorage-v1.html 查看他们的 API 文档 创建或替换 object.

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

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

当通过其 UploadFileAsync 方法上传文件时,DotNet WebClient 显然仅支持 POST,因此已过时。我找到了许多其他上传示例,全部使用 multipart-formdata 和 POST.

如何创建包含大文件内容的 PUT 请求,而无需将文件读入缓冲区?

我很感激任何关于示例或文档的提示或指针!

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