Я пытаюсь загрузить файл с C# на сервер, но он не работает должным образом. Я написал следующий код:
string adress2send = "http://ip_adress"
byte[] buff = null;
FileStream fs = new FileStream(file2upload,FileMode.Open,FileAccess.Read);
BinaryReader br = new BinaryReader(fs);
long numBytes = new FileInfo(file2upload).Length;
buff = br.ReadBytes((int)numBytes);
byte[] file = buff;
string contentType = "application/octet-stream";
string boundary = "------------------------" + DateTime.Now.Ticks.ToString("x");
using (WebClient wc = new WebClient())
{
wc.Headers.Add("Content-Type", "multipart/form-data; boundary = " + boundary);
var fileData = wc.Encoding.GetString(file);
var package = string.Format("--{0}\r\nContent-Disposition: form-data; name=\"file\"; filename=\"{1}\"\r\nContent-Type: {2}\r\n\r\n{3}\r\n--{0}--\r\n", boundary, adress2send, contentType, fileData);
var nfile = wc.Encoding.GetBytes(package);
byte[] resp = wc.UploadData(adress2send, "POST", nfile);
}
В принципе работает. Файл правильно загружен на сервер, и сервер его использует. Но я получаю сообщение об ошибке по адресу:
byte[] resp = wc.UploadData(adress2send, "POST", nfile):
System.Net.WebException: "Der Server hat eine Protokollverletzung ausgeführt.. Section=ResponseStatusLine"
Я думаю, это происходит потому, что я жду ответа и не получаю ответа? Есть ли способ отправить данные и не ждать ответа? Или это ошибка сервера или ошибка кода? Есть ли альтернатива этому?
Я попытался сделать это с помощью WebRequest, но это не сработало: файл не загружен на сервер. Я читал много других тем, например: Link1, Link2 И много других, но решения не могу найти.
Вы думаете, что это проблема пакета? Поскольку приведенный выше код может отправить файл на сервер, и сервер, очевидно, получает и использует данные. Проблема в том, что файл отправлен правильно, но я получаю сообщение об ошибке и не могу отправить этот пакет с помощью
Проблема с приведенным выше кодом заключается в том, что файл отправлен правильно, но я получаю сообщение об ошибке. Или это все еще может быть проблема с пакетом? С другой стороны, я попытался переписать приведенный выше код с помощью WebRequest, и тут я полностью потерпел неудачу, потому что сервер не может использовать тот же пакет. Но я посмотрю на вашу ссылку и протестирую это. Кроме того, важно знать, что я использую локальную кодировку. Большое спасибо !





Вы проверили свои значения
var package = string.Format(...)? В любом случае, я бы сказал: UploadFile со значениями POST от WebClient. Но не совсем о WebClient. Также обратите внимание, чтоWebClient.Encodingиспользует локальную кодировку (кодовую страницу вашей системы). Возможно, это не то, что ожидается с другой стороны.