Можно ли выполнить загрузку файла в веб-API с использованием веб-файла в качестве источника с использованием потоковой передачи? - PullRequest
1 голос
/ 01 октября 2009

В C # вместо загрузки файла из Интернета с помощью httpwebrequest, сохраните его в файл где-нибудь, а затем загрузите в веб-службу, используя POST с файлом в качестве одного из параметров ...

Могу ли я вместо этого как-нибудь открыть поток считывателя из httpwebresponse и затем направить его в http POST? Любой код, который кто-то может опубликовать, чтобы показать, как?

Другими словами, я стараюсь не сперва сохранять на диск.

Спасибо

1 Ответ

2 голосов
/ 01 октября 2009

Нечто подобное должно сработать:

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();
}

(непроверенный код)

...