Рассчитайте SHA1 во время PostAsync с StreamContent в ядре .net - PullRequest
0 голосов
/ 30 октября 2018

Я хотел сделать HTTP-запрос POST с большим файлом, поэтому я написал код C # для ядра .net следующим образом:

using (var fileStream = new FileStream(filePath, FileMode.Open))
using (var streamContent = new StreamContent(fileStream))
{
    var content = new MultipartFormDataContent();
    content.Add(streamContent);
    resp = await httpClient.PostAsync(requestUri, content);
}

Это хорошо сработало для меня. Но я обнаружил, что было бы неплохо, если бы SHA1 можно было вычислить в этом контексте, тогда его можно использовать для простого кэширования результата POST.

Я нашел несколько ответов на SO, таких как:

Как сделать контрольную сумму файла SHA1 в C #?

Но я понятия не имею, как я могу использовать это в своем коде.

Вот что я попробовал:

byte[] hash = null;

using (SHA1Managed shaForStream = new SHA1Managed())
using (var fs = new FileStream(filePath, FileMode.Open))
using (var streamContent = new StreamContent(fs))
{
    var content = new MultipartFormDataContent();
    content.Add(streamContent);
    resp = await httpClient.PostAsync(requestUri, content);
    hash = shaForStream.ComputeHash(fs);
}

Это не работает. Например, значение sha1 одинаково для разных файлов.

Думаю, мне нужно больше изучать Stream. Не могли бы вы сказать, какие материалы мне нужно изучить для решения этой проблемы?

p.s, Есть несколько способов кешировать запрос и ответ, то есть параметры запроса и ответ, но я хочу сделать это с помощью способа SHA1 для тестирования. Мне просто интересно, как я могу что-то вычислить и запросить POST только с одним потоком. Я могу сделать это, создав два файловых потока. :)

...