2015-10-28 2 views
0

Je travaille avec l'API OpenStack Swift version 1 et j'essaie de télécharger un fichier volumineux dans son stockage d'objets en utilisant C# et DotNet 4.5 dans Visual studio 2015.Comment utiliser PUT pour télécharger un fichier volumineux à l'aide de C# et de données brutes (non multipart-formdata)

Voir la documentation de l'API à http://developer.openstack.org/api-ref-objectstorage-v1.html dans les objets section sous Créer ou remplacer objet. En suivant leur exemple en utilisant curl, j'ai pu télécharger un petit fichier de test. Wireshark montre un protocole très simple avec la méthode PUT, deux en-têtes et les données brutes:

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 

Le DotNet WebClient supporte apparemment seulement POST lors du téléchargement des fichiers via sa méthode UploadFileAsync, de sorte que est sorti. J'ai trouvé beaucoup d'autres exemples de téléchargement, tous utilisant multipart-formdata et POST.

Comment créer une requête PUT qui inclut le contenu d'un fichier volumineux sans avoir à lire le fichier dans un tampon? J'apprécie tous les conseils ou des indications sur des exemples ou de la documentation!

+0

D'oh! Un collègue m'a dit de revérifier les méthodes WebClient, et bien sûr il y en a un appelé UploadFileTaskAsync (notez la Tâche dans le nom), qui accepte un paramètre "méthode". J'essaie ça maintenant. – Alan

Répondre

0

avère que WebClient a une méthode UploadFileTaskAsync qui prend en charge un paramètre de méthode que je peux mettre à poser.