Как преобразовать файл в двоичный формат для отправки его внутри полезной нагрузки 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 выглядят как бред. Как вы и предполагали, это текстовое представление двоичных данных.