Загрузить файл в веб-сервис ASP с HTTP / 1.1 POST - PullRequest
0 голосов
/ 23 марта 2011

Я пытаюсь загрузить файл в веб-службу ASP 2.0 через HTTP 1.1 POST из клиентского приложения.Если моя функция веб-службы объявлена ​​как

<WebMethod()>
Public Function UploadFile(ByVal file as Byte(), ByVal fileName as String) as String
...

В тестовой форме указано, что запрос должен иметь следующую форму:

POST address_of_service HTTP/1.1
Host: <host>
Content-Type: application/x-www-form-urlencoded
Content-Length: length

file=string&file=string&fileName=string

Как мне получить данные двоичного файла в эту форму?Я пытался просто преобразовать данные файла в строку и поместить их в тело (file=<string_data_here>), но я получаю обратно ошибки HTTP 500, жалуясь на невозможность преобразовать их в System.Byte.У меня HTTP POST работает нормально в другом месте моего приложения с простыми строковыми параметрами.

Кроме того, из любопытства, почему он показывает параметр файла дважды?

1 Ответ

2 голосов
/ 23 марта 2011

Преобразование двоичного потока в строку на основе Base64 и передачу ее веб-службе с помощью Post.Когда веб-служба получает вызов для выполнения, вы можете затем преобразовать обратно из строки Base64 в исходную последовательность двоичных массивов.

См. Следующее;

Преобразование файла в строку Base64 в POST;

var fileStream = File.Open(<your file path>, FileMode.Open, FileAccess.Read);
var reader = new BinaryReader(fileStream);
var data = new byte[fileStream.Length];
reader.Read(data, 0, data.Length);
var strBase64 = Convert.ToBase64String(data, 0, data.Length);

Преобразование его обратно в двоичный файл в методе веб-службы SOAP:

var data = Convert.FromBase64String(<your webmethod input Base64 string>);

Отказ от ответственности: я предоставил этот пример, не имея возможности проверить его компиляцию, но он, надеюсь, долженВы в правильном направлении, чтобы выполнить ваше требование.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...