2009-09-30 7 views
1

En C# plutôt que d'avoir à dowloading un fichier à partir du Web en utilisant HttpWebRequest, enregistrez ce fichier pour quelque part, puis télécharger sur un webservice en utilisant un POST avec le fichier en tant que l'un des paramètres ...Puis-je télécharger un fichier sur une API Web à l'aide d'un fichier Web en tant que source en streaming?

Puis-je à la place en quelque sorte, ouvrez un flux de lecture de httpwebresponse, puis le diffuser dans le http POST? Tout code que quelqu'un pourrait poster pour montrer comment? En d'autres termes, j'essaie d'éviter de devoir d'abord enregistrer sur le disque.

Merci

Répondre

2

Quelque chose comme ça devrait faire l'affaire:

HttpWebRequest downloadRequest = WebRequest.Create(downloadUri) as HttpWebRequest; 
using(HttpWebResponse downloadResponse = downloadRequest.GetResponse() as HttpWebResponse) 
{ 
    HttpWebRequest uploadRequest = new HttpWebRequest(uploadUri); 
    uploadRequest.Method = "POST"; 
    uploadRequest.ContentLength = downloadResponse.ContentLength; 
    using (Stream downloadStream = downloadResponse.GetResponseStream()) 
    using (Stream uploadStream = uploadRequest.GetRequestStream()) 
    { 
     byte[] buffer = new byte[4096]; 
     int totalBytes = 0; 
     while(totalBytes < downloadResponse.ContentLength) 
     { 
      int nBytes = downloadStream.Read(buffer, 0, buffer.Length); 
      uploadStream.Write(buffer, 0, nBytes); 
      totalBytes += nRead; 
     } 
    } 
    HttpWebResponse uploadResponse = uploadRequest.GetResponse() as HttpWebResponse; 
    uploadResponse.Close(); 
} 

(code non testé)

+0

Wow ... Je vais l'essayer quand je suis de retour à la maison, puis mettre à jour ... merci beaucoup – Greg

+0

Hey Thomas - juste pour en revenir à cela - Je remarque que j'ai un problème si je cible une page pour laquelle le serveur ne fournit pas ContentLength (par exemple à downloadResponse.ContentLength). Il me semble obtenir "System.NotSupportedException: Ce flux ne supporte pas les opérations de recherche ..". Des idées ici en termes de comment aborder cela? – Greg

+0

Sur quelle instruction obtenez-vous cette exception? –

Questions connexes