Как преобразовать файл в двоичный формат для отправки его внутри полезной нагрузки POST-запроса

Я пытаюсь использовать этот API, который конвертирует файлы между различными форматами. Как часть запроса, он ожидает файл в двоичном формате. Я пытаюсь понять, что именно это означает, когда дело доходит до C#. Все, что я прочитал, указывает на использование байтового массива, но это пока не работает.

По сути, мне нужно преобразовать документ в двоичный файл, а затем использовать эти необработанные данные и подключить их к другой части системы, которая отвечает за отправку фактического запроса POST.

Чтобы лучше понять API, я протестировал конечную точку и просмотрел полезную нагрузку запроса. Chrome не отображает необработанные данные, которые отправляются как часть поля File:

Скриншот запроса полезной нагрузки

Fiddler делает, но это бред (вероятно, потому что он пытается интерпретировать байты как ASCII):

Так что я немного растерялся. Что для этого объекта form-data в полезной нагрузке запроса, что мне нужно сделать с файлом, который у меня есть в C#? Я попытался это (я обращаюсь к файлу из другой системы, используя API этой системы):

DocumentInfo di = this.BoundEntryInfo as DocumentInfo;
string contentType = "application/msword";
string binaryValue;

using (DocstarReadStream filestream = di.ReadDoc(out contentType)) //open a stream to the word document in the other system
{
    using (MemoryStream mstream = new MemoryStream())
    {
         filestream.CopyTo(mstream);
         binaryValue = string.Join("", mstream.ToArray());
    }
}

Результирующий binaryValue Строка имеет значение, подобное этому:

...

Однако использование этого значения в качестве значения поля File в полезной нагрузке POST-запроса приводит к ошибке Bad Request (она говорит "ошибка преобразования", поэтому я предполагаю, что данные как-то отформатированы неправильно).

1 ответ

Решение

Вместо преобразования байтового массива в строку и отправки его в качестве тела, вы должны вместо этого записать байты в поток запроса, отправляемый через выбранный вами HttpClient. Кодировка типа содержимого ожидает, что вы отправите необработанные двоичные данные в качестве полезной нагрузки, и не знает, что делать с интерпретацией строки.

Вот почему данные в Fiddler выглядят как бред. Как вы и предполагали, это текстовое представление двоичных данных.

Другие вопросы по тегам