выгрузка файла Post запросом не работает если файл >2 Гб

Vasilij7856

Client
Регистрация
16.02.2018
Сообщения
27
Реакции
4
Баллы
3
Всем привет!
Скрипт Post запросом отправляет файл (zip) на сервер.
Всё коректно работает - если файл не большой (пару Мб, либо даже 1,2 Гб).
Но как файл оказался 2,1 Гб - то квадратик с Post-запросом даже не пытается что-либо отправить - пишет "Выполнение HTTP-запроса Результат: ok" - и выходит по "зелёной" ветке.
Предполагаю что скорее всего в самой Зенке - в настройках есть какое-то ограничение - кто-то знает в чём у меня проблема ?
 
Последнее редактирование:
Максимальный размер загружаемого файла на сервер зависит от настроек этого самого сервера.
 
Используйте curl.
 
нет, таймаут стоит 1000 сек, но Зенка этот кубик проходит за пол секунды по зелёной ветке
Эм... Таймаут - это время ожидания - вы хотите что бы пост запрос за секунду отправил вам файл более 2 гб залил? Покажите пожалуйста скрин зенно кубика, которым вы отправляете, либо прикрепите образец шаблона и что приходит в ответ?
 
Последнее редактирование:
Эм... Таймаут - это время ожидания - вы хотите что бы пост запрос за секунду отправил вам файл более 2 гб залил? Покажите пожалуйста скрин зенно кубика, которым вы отправляете, либо прикрепите образец шаблона и что приходит в ответ?
1) у кубика стоит таймаут 1000 сек
2) если этот кубик аплоадит файл допустим весом 1,2 Гб - это занимает +/- 30 сек
3) если этот кубик аплоадит файл весом 2+ Гб:
- кубик сразу выполняется без задержек
- его работа занимает пол секунды
- в логах "Выполнение HTTP-запроса Результат: ok"
- кубик выходит по зелёной ветке
 
1) у кубика стоит таймаут 1000 сек
2) если этот кубик аплоадит файл допустим весом 1,2 Гб - это занимает +/- 30 сек
3) если этот кубик аплоадит файл весом 2+ Гб:
- кубик сразу выполняется без задержек
- его работа занимает пол секунды
- в логах "Выполнение HTTP-запроса Результат: ok"
- кубик выходит по зелёной ветке
Я бы на вашем месте попробовал отправить Post запрос не через кубик, а через свой код c#. С самим кодом, к сожалению, не помогу
 
Я бы на вашем месте попробовал отправить Post запрос не через кубик, а через свой код c#. С самим кодом, к сожалению, не помогу
Полностью поддерживаю

Сутки мучался чтобы отправить файл на сервер сайта в итоге С# код спас

C#:
Развернуть Свернуть Копировать
string filePath = project.Variables["var"].Value; //дириктория файла
string output = "";
string boundary = "------WebKitFormBoundaryYPOgzb4LvWqu9Cpw" + DateTime.Now.Ticks.ToString("x");

string url = "https://api/"; //ссылка запроса

if(System.IO.File.Exists(filePath))
{
    FileInfo strFileInfo = new FileInfo(filePath);
    string fileName = strFileInfo.Name;
    string fileType = System.Web.MimeMapping.GetMimeMapping(filePath);
    output += boundary+"\r\n";
    output += string.Format("Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\n", "audio", fileName);
    output += string.Format("Content-Type: {0}\r\n\r\n", fileType);
    output += string.Format("{0}\r\n", filePath);
}

output += string.Format("{0}\r\n", boundary + "\r\n" + "Content-Disposition: form-data; name=\"preview\"\r\n\r\nfalse\r\n");
output += boundary+"--"; //можно убрать так как в моем случае нужно было передавать доп информацию

var post = ZennoPoster.HttpPost(
    url,
    output,
    "multipart/form-data",
    string.Empty,
    string.Empty,
    ZennoLab.InterfacesLibrary.Enums.Http.ResponceType.BodyOnly
);

project.Variables["post"].Value = post;
 
Последнее редактирование:
Полностью поддерживаю

Сутки мучался чтобы отправить файл на сервер сайта в итоге С# код спас

C#:
Развернуть Свернуть Копировать
string filePath = project.Variables["var"].Value; //дириктория файла
string output = "";
string boundary = "------WebKitFormBoundaryYPOgzb4LvWqu9Cpw" + DateTime.Now.Ticks.ToString("x");

string url = "https://api/"; //ссылка запроса

if(System.IO.File.Exists(filePath))
{
    FileInfo strFileInfo = new FileInfo(filePath);
    string fileName = strFileInfo.Name;
    string fileType = System.Web.MimeMapping.GetMimeMapping(filePath);
    output += boundary+"\r\n";
    output += string.Format("Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\n", "audio", fileName);
    output += string.Format("Content-Type: {0}\r\n\r\n", fileType);
    output += string.Format("{0}\r\n", filePath);
}

output += string.Format("{0}\r\n", boundary + "\r\n" + "Content-Disposition: form-data; name=\"preview\"\r\n\r\nfalse\r\n");
output += boundary+"--"; //можно убрать так как в моем случае нужно было передавать доп информацию

var post = ZennoPoster.HttpPost(
    url,
    output,
    "multipart/form-data",
    string.Empty,
    string.Empty,
    ZennoLab.InterfacesLibrary.Enums.Http.ResponceType.BodyOnly
);

project.Variables["post"].Value = post;
Помучился, сделал через предложенный вами вариант - но к сожалению получил такой ответ в процессе выполнения C#:
"Выполнение действия CSharp OwnCode. Слишком длинный файл. Данная операция в настоящее время поддерживает файлы размером меньше 2 ГБ."
а так - да, файлы меньшего размера - тоже заливает - как и стандартный Post-запрос...
 
В общем проблема выгрузки большого файла решилась с помощью curl - через запуск cmd.

Вдруг кому-то понадобиться - поэтому прикрепляю миниатюту от образца скрипта + сам скрипт.
Краткое описание - скрипт:
1) загружает профиль в проект
2) берёт из профиля куки ({-Variable.cookie-})
3) запускает cmd с параметрами запуска (где и указано что и куда заливать с помощью curl)

curl file upload:
Развернуть Свернуть Копировать
/c curl --insecure --cookie "{-Variable.cookie-}" --form "size_info=sample1" --form "type=sample2" -F "file[]=@{-Project.Directory-}\{-Variable.fileName-}.zip;type=application/x-zip-compressed" -F "filename*=utf-8''{-Variable.fileName-}.zip" https://{-Variable.hostname-}/upload

Для понимания того какие заголовки нужно было прописать в CURL - использовался Фидлер (Fiddler) - и анализировались запросы отправляемые оригинальной формой (через браузер), и тем что получалось через cmd -> curl-ом

*чтобы Фидлер перехватывал запросы отправленные через cmd - нужно в код добавить прокси - такой командой:
прокси для curl:
Развернуть Свернуть Копировать
x http://127.0.0.2:8888
**естественно IP зависит от настройки вашей сети
тоесть запрос будет выглядеть так:
пример curl запроса с использованием прокси:
Развернуть Свернуть Копировать
/c curl x http://127.0.0.2:8888 --insecure --cookie "{-Variable.cookie-}" --form "size_info=sample1" --form "type=sample2" -F "file[]=@{-Project.Directory-}\{-Variable.fileName-}.zip;type=application/x-zip-compressed" -F "filename*=utf-8''{-Variable.fileName-}.zip" https://{-Variable.hostname-}/upload

теперь некоторые нюансы/пояснения используемые в команде:
"--insecure" - это команда для curl - игнорировать "небезопастное соединение" - у меня curl ругался и выдавал ошибку - т.к. я обращался к домену с просроченным сертификатом/небезопастным соединением
если нужно использователь дополнительные заголовки - они вставляются в запрос - например:
-H "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
-H "Accept-Encoding: gzip, deflate, br"
--user-agent "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:56.0) Gecko/20100101 Firefox/56.0"
и т.д.

поэтому итоговый запрос - может выглядеть так:
Код:
Развернуть Свернуть Копировать
/c curl x http://127.0.0.2:8888 --insecure -H "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" -H "Accept-Encoding: gzip, deflate, br" --user-agent "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:56.0) Gecko/20100101 Firefox/56.0" --cookie "{-Variable.cookie-}" --form "size_info=sample1" --form "type=sample2" -F "file[]=@{-Project.Directory-}\{-Variable.fileName-}.zip;type=application/x-zip-compressed" -F "filename*=utf-8''{-Variable.fileName-}.zip" https://{-Variable.hostname-}/upload




ps - код можно просто запускать в командной строке (cmd.exe) - тогда просто убирается из начала команда "/c"
Код:
Развернуть Свернуть Копировать
curl --insecure --cookie "{-Variable.cookie-}" --form "size_info=sample1" --form "type=sample2" -F "file[]=@{-Project.Directory-}\{-Variable.fileName-}.zip;type=application/x-zip-compressed" -F "filename*=utf-8''{-Variable.fileName-}.zip" https://{-Variable.hostname-}/upload
 

Вложения

  • index.png
    index.png
    102 KB · Просмотры: 166
  • sample.zp
    sample.zp
    13,8 KB · Просмотры: 156
  • Спасибо
Реакции: Deisler
Столкнулся с подобной проблемой. Большие файлы не заливаются с помощью ZennoPoster.HttpPost
1.95 GB еще нормально проходит, но с большими реально проблема. Метод отрабатывает за долю секунды да же не пытаясь загрузить, при этом никаких ошибок не выбивает.

Может кто победил средставами ZP ? Курл мне не подходит.
 

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)