C# Загрузить один файл с помощью HTTPWebRequest или WebClient (multipart / form-data)

Я пытаюсь загрузить файл с 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 И много других, но решения не могу найти.

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

Jimi 20.07.2018 02:59

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

Loui 20.07.2018 11:11

Проблема с приведенным выше кодом заключается в том, что файл отправлен правильно, но я получаю сообщение об ошибке. Или это все еще может быть проблема с пакетом? С другой стороны, я попытался переписать приведенный выше код с помощью WebRequest, и тут я полностью потерпел неудачу, потому что сервер не может использовать тот же пакет. Но я посмотрю на вашу ссылку и протестирую это. Кроме того, важно знать, что я использую локальную кодировку. Большое спасибо !

Loui 20.07.2018 11:20
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
3
1 160
0

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