Форум программистов, компьютерный форум, киберфорум
C#: Web, ASP.NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
2 / 2 / 0
Регистрация: 18.06.2016
Сообщений: 143
.NET 4.x

Передача файла на сервер методом POST

05.02.2017, 09:53. Показов 1885. Ответов 7

Студворк — интернет-сервис помощи студентам
Потолок: .Net 4.0
Идея: передать файл методом POST на сервер скрипту.
Что есть:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
        public string ZAGPyZKA_FAiLA(string FAiL, string id0, string DELO = "BblPBu_GLAZ_PyLuT")
        {
            //Дело - картинка объявления.
            // 1
            string GOPOD = _HACTPOiKu["GOPOD"];
            string ATU = "GOPOD=" + GOPOD + "|email="+ _HACTPOiKu["email"] +"|id="+ id0 + "|DELO=" + DELO;
            StringBuilder sb = new StringBuilder();
            sb.AppendLine("------WebKitFormBoundaryFQyoiBAmgWBjjIyg");
            sb.AppendLine("Content-Disposition: form-data; name="X-Client-Version"");
            sb.AppendLine("");
            sb.AppendLine("");
            sb.AppendLine("1.0.00");
            sb.AppendLine("------WebKitFormBoundaryFQyoiBAmgWBjjIyg");
            sb.AppendLine("Content-Disposition: form-data; name="X-Client-Type"");
            sb.AppendLine("");
            sb.AppendLine("API");
            sb.AppendLine("------WebKitFormBoundaryFQyoiBAmgWBjjIyg");
            sb.AppendLine("Content-Disposition: form-data; name="X-Api-Version"");
            sb.AppendLine("");
            sb.AppendLine("1.0");
            sb.AppendLine("------WebKitFormBoundaryFQyoiBAmgWBjjIyg");
            sb.AppendLine("Content-Disposition: form-data; name="X-Authorization"");
            sb.AppendLine("");
            sb.AppendLine(ATU);
            sb.AppendLine("");
            sb.AppendLine("------WebKitFormBoundaryFQyoiBAmgWBjjIyg");
            sb.AppendLine("Content-Disposition: form-data; name="Accept"");
            sb.AppendLine("");
            sb.AppendLine("application/json");
            sb.AppendLine("------WebKitFormBoundaryFQyoiBAmgWBjjIyg");
            sb.AppendLine("Content-Disposition: form-data; name="KAPTuHKA"; filename="" + System.IO.Path.GetFileName(FAiL) + """);
            //sb.AppendLine("Content-Type: application/octet-stream");
            sb.AppendLine("Content-Type: image/"+ System.IO.Path.GetExtension(FAiL));
            sb.AppendLine("");
 
            byte[] nach = Encoding.ASCII.GetBytes(sb.ToString());
            byte[] str = File.ReadAllBytes(FAiL);
            byte[] stri = Encoding.ASCII.GetBytes(Environment.NewLine);
            byte[] str2 = Encoding.ASCII.GetBytes("------WebKitFormBoundaryFQyoiBAmgWBjjIyg--");
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(_HACTPOiKu["CKPunT"]);
            request.CookieContainer = new CookieContainer();
            request.Accept = "application/json";
            request.ServicePoint.Expect100Continue = false;
            request.Referer = "http://ya.ru";
            request.ContentType = "multipart/form-data; boundary=----WebKitFormBoundaryFQyoiBAmgWBjjIyg";
            request.UserAgent = " Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36";
            request.AllowAutoRedirect = true;
            //  request.Proxy = new WebProxy("84.27.75.236:39460");
            request.Host = _HACTPOiKu["CAiT"];
            request.KeepAlive = true;
            
            request.TransferEncoding = "";
 
            request.Headers.Add("X-Requested-With: XMLHttpRequest");
            request.Headers.Add("X-Api-Version: 1.0");
            request.Headers.Add("X-Client-Version: 1.0.00");
            request.Headers.Add("X-Authorization: " + ATU);
            request.Headers.Add("X-Client-Type: API");
            request.Headers.Add("Accept-Encoding: gzip,deflate,sdch");
            request.Headers.Add("Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4");
            
            request.Method = "POST";
 
            request.ContentLength = nach.Length + str.Length + str2.Length + stri.Length;
            using (Stream requestStream = request.GetRequestStream())
            {
                requestStream.Write(nach, 0, nach.Length);
                requestStream.Write(str, 0, str.Length);
                requestStream.Write(stri, 0, stri.Length);
                requestStream.Write(str2, 0, str2.Length);
                requestStream.Close();
            }
            try
            {
                using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
                {
                    response.Cookies = request.CookieContainer.GetCookies(request.RequestUri);
                    if (response.Cookies != null)
                    {
                        //Cooks.Add(response.Cookies);
                    }
                    var s = request.GetResponse();
                    //return getLink(System.IO.Path.GetFileName(FAiL));
                    return (FAiL);
                }
            }
            catch (WebException e)
            {
                return "" + e;
            }
}
Затруднение: я не знаю почему картинку мой скрипт(на PHP) на сервере, не ложит в директорию(что в нём указано) картинку, что я ему сую. Да и как вообще узнать: что мой скрипт ответил на запрос закачки картинки?
Смотрел:
var s = request.GetResponse();
- ненашёл строки "что выплёвывает мой скрипт". Что мне надо смотреть?

П.с.: ещё вопрос: как передать в переменной "ATU" русские буквы так, чтобы они передавались на сервер. У меня ругается "не допустимые символы"?

Добавлено через 27 минут
Если имеет значение: на сервере, массивы $_SERVER и $_FILES не пустые(в них инфа об соединении с свервером). Т.е. файл на сервер попадает.

Добавлено через 19 часов 37 минут
Что? Нет возможности узнать "что мне скрипт ответил на попытку закачать файл"?

Добавлено через 34 секунды
Может я выбрал(нашёл) неправильный способ реализации?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.02.2017, 09:53
Ответы с готовыми решениями:

Передача изображения на сервер методом POST
Прощу прощения за возможно глупый вопрос, но уже третий день бъюсь. Суть: Есть онлайн галерея с возможность загрузки изображений. ...

Передача json массива POST методом на сервер
Есть сервис, на другом домене (не мой сайт), там по специально выданному url, можно отправлять массив json и получать ответ, произошла...

Передача переменной методом POST
Здравствуйте! Возник следующий вопрос: Имеется JavaScript-переменная, допустим Х1, её надо передать методом POST, чтобы в дальнейшем...

7
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18307 / 14231 / 5368
Регистрация: 17.03.2014
Сообщений: 28,904
Записей в блоге: 1
05.02.2017, 13:58
47911, сравни запрос который делает твое приложение и браузер с помощью http отладчика Fiddler. Исходя из этой разницы и думай что в коде сделано не так.
1
2 / 2 / 0
Регистрация: 18.06.2016
Сообщений: 143
08.02.2017, 12:55  [ТС]
А что насчёт ответа сервера? Как мне дать понять: что сервер отработал без ошибок или несмог переместить картинку в нужную папку?(сам скрипт проверку делает, на сервере. Как мне программу уведомить? Ибо в переменной response и request я не нашёл места, где выводиться страница-ответ сервера(скажем сервер всегда начинает ответ со строки "АЗАЗЗА", и этого набора букв нету в переменных, указанных мной))

Добавлено через 36 секунд
Что я пропустил?

Добавлено через 21 час 44 минуты
Вопрос актуален: как получить ответ сервера(содержимое страницы), на обращение к нему(HttpWebResponse response = (HttpWebResponse)request.GetResponse())? Может я что-то неправильно сделал?
0
 Аватар для sau
2774 / 2074 / 386
Регистрация: 22.07.2011
Сообщений: 7,822
08.02.2017, 19:34
В HttpResponse и будет ответ сервера в бинарном виде , который нужно привести к строковому той или иной кодировкой.
А вообще , это низкоуровневое и громоздкое апи , есть попроще и покороче варианты , например, файл можно выгрузить одной строчкой:
C#
1
 new WebClient().UploadFile("http://mysite", filepath);
https://msdn.microsoft.com/en-... .110).aspx
1
2 / 2 / 0
Регистрация: 18.06.2016
Сообщений: 143
08.02.2017, 20:24  [ТС]
А ответ, что произошло при попытке загрузить файл? И мне надо как-то убедиться что файл пришёл от программы, что я написал, а не "Кто-то левый". Строку, что вы привели я находил ранее.
Цитата Сообщение от sau Посмотреть сообщение
В HttpResponse и будет ответ сервера в бинарном виде , который нужно привести к строковому той или иной кодировкой.
Пример можно?(которая часть будет содержать мой ответ. По умолчанию у меня кодировка УТФ-8. Как перевести?)
0
 Аватар для sau
2774 / 2074 / 386
Регистрация: 22.07.2011
Сообщений: 7,822
08.02.2017, 21:18
https://msdn.microsoft.com/ru-... .110).aspx
1
2 / 2 / 0
Регистрация: 18.06.2016
Сообщений: 143
09.02.2017, 11:39  [ТС]
Ваша ссылка: есть строка "Encoding encode = System.Text.Encoding.GetEncoding("utf-8");". Она натолкнула меня на размышления(я кое-что вспомнил: что ответ может приходить в байтах, а не готовом коде страницы(что видим в браузере).). Нашёл: https://msdn.microsoft.com/ru-... .110).aspx
Из того следует:
C#
1
2
3
4
5
6
7
                using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
                {
                    Stream receiveStream = response.GetResponseStream();
                    StreamReader readStream = new StreamReader(receiveStream, Encoding.UTF8);
                    string s = readStream.ReadToEnd();//Тут содержимое страницы-ответа.
                    return (FAiL);
                }
В общем благодарю за ответы, мне они очень помогли.

П.с.: фактически ваш ответ был верен. Но для не опытных, вроде меня, это был не полный ответ.
0
10.02.2017, 06:06

Не по теме:

47911, тебя прёт, что ли, таким стилем сущности именовать? :D

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.02.2017, 06:06
Помогаю со студенческими работами здесь

Передача данных методом POST
Приветствую!! Есть две обычные формы, В первой есть текстовое поле: <form action="1.php method="post"...

Передача данных методом POST
с помощью этого скрипта он авторизируется на сайте. но комментарий не добавляет. в чем ошибка? # -*- coding: cp1251 -*- import...

Передача значений методом post
Здравствуйте, помогите пожалуйста Имеется скрипт оплаты: <form method="post"...

Передача переменной методом POST
Подскажите пожалуйста, как получить значение переменной на странице bat.php. : session_start(); if(!$_SESSION) { header...

Передача методом Post из JS в PHP
Есть скрипт, выполняющийся при нажатии кнопки: function check(){ var name = document.getElementById('name'); var...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru