Добавил еще ведущие нули к миллисекундам, если кому-то еще когда-то этот код понадобится
log = function (text, color, define){ var id, time, thread, logHtml, textLog; define = (typeof define == 'string') ? define.split(/[\s,.|:;]+/g) : define; if(typeof define === 'object' && define !== null){ if(Array.isArray(define)){ id = define.indexOf('id') > -1; time = define.indexOf('time') > -1; thread = define.indexOf('thread') > -1; } else{ id = define.id == true; time = define.time == true; thread = define.thread == true; } } else id = time = thread = true; id = id ? '<a href="action://action' + ScriptWorker.GetCurrentAction() + '" style="color:gray;">[' + ScriptWorker.GetCurrentAction() + ']</a>' : ''; time = time ? ' ' + getTime() : ''; thread = thread ? ' Поток №' + thread_number() : ''; logHtml = (id || time || thread) ? id + '<span style="color: white">' + time + thread + ' : </span>' : ''; logHtml += '<span style="color:' + (color ? color : 'white') + '">' + text + '</span>'; textLog = '[' + ScriptWorker.GetCurrentAction() + ']' + time + thread + ' : ' + text function getTime(){ var checkTime = function(i){ return (i < 10) ? "0" + i : i; }; var checkMilliSeconds = function(ms){ if (ms < 10) { return "00" + ms; } else if (ms < 100) { return "0" + ms; } else { return ms; } }; var d = new Date(); var hh = checkTime(d.getHours()); var mm = checkTime(d.getMinutes()); var ss = checkTime(d.getSeconds()); var ms = checkMilliSeconds(d.getMilliseconds()); return '[' + hh + ':' + mm + ':' + ss + '.' + ms + ']'; }; Logger.WriteHtml(logHtml, textLog); }Как отправлять бинарные данные в post запросе с multipart/form-data
-
Доброго времени суток, господа. Задача вроде бы не сложна, но с интерфейсом я не справился, видимо не дано
Суть такова, что у меня есть видео .mp4 которое я должен слать кусками до 5мб в пост запросах. Я уже сделал node.js скрипт, который мне делает из видео бинарку и делит его на эти чанки до 5мб и сохраняет их в список в бинарке, либо в бинарке закодированной в base64. Более того, я сделал второй node.js скрипт который делит это все на чанки до 5мб и сохраняет в бинарке во временные файлы .bin
Проблема же в том, что мои скудные познания баса не ориентированы на такие тонкости и я не сумел использовать ни тот ни другой скрипт должным образом и отправить бинарку в запросе. Я нашел темы где умельцы подсказывали как отправить файл в запросе, но, как я понял, это сработало бы в том случае если бы я слал все видео целиком, а мне же нужно сначала разделить его на куски эти до 5мб в бинарке, а как такое слать, я, увы, не разобрался
Сам запрос выглядит примерно так в фаерфоксе:
------geckoformboundaryec956ef896cab4c92fc105aa20a2e20
Content-Disposition: form-data; name="media"; filename="blob"
Content-Type: application/octet-stream"тут бинарные данные"
------geckoformboundaryec956ef896cab4c92fc105aa20a2e20--Следовательно, основной контент тайп - multipart/form-data
Подтип внутри пост даты - application/octet-streamЭто мой первый вопрос здесь, поэтому прошу прощения если спрашиваю не там, где нужно и прошу прощения в таком случае. Буду очень признателен любой малейшей подсказке или критике
-
@redwine Нажмите на вопросик на поле в интерфейсе для отправки данных там есть примеры. Нужно данные читать в base64, пример из этого вопросика:
If file has binary format, you need to read it in base64 encoding and append 'base64:' before variable.
Example #6. Upload binary file.
--randomstringboundary
Content-Disposition: form-data; name="test"; filename="filename.bin"
Content-Type: application/octet-streambase64:[[VARIABLE_WITH_BASE64_ENCODING]]
--randomstringboundary-- -
с multipart лучше запрос составлять через

Удобнее будет -
@usertrue спасибо большое, сделал как вы сказали, но к сожалению все равно не помогло. В ответе получаю в хедере total-bytes: 0 (показатель того, что не прочитало мой кусок бинарки этот) и в сниффере баса не видно что я в пост дате отправил, предположу что из за бинарки. Сейчас пост дата выглядит у меня следующим образом
------geckoformboundaryec956ef896cab4c92fc105aa20a2e20
Content-Disposition: form-data; name="media"; filename="blob"
Content-Type: application/octet-streambase64:[[LIST_ELEMENT]]
------geckoformboundaryec956ef896cab4c92fc105aa20a2e20--В переменной [[LIST_ELEMENT]] точно содержится бинарка в бейс64. Чуть позже проверю через wireshark чтобы знать точно, но пока что ощущение что как то не так я бинарные данные передаю и можно проще :(
-
@Valerax спасибо большое за совет, но уже попробовал и не увенчалось успехом :(
там либо нельзя указать дополнительный контент тайп - октед-стрим, либо я в очередной раз не справился с интерфейсом. Еще пробовал как раз таки через этот конструктор составлять запрос, указывая там чтоб отправить свой файл с бинаркой .bin и тогда вроде как тоже оно не читало по какой то причине. Понимаю что начинает выглядеть уже будто проблема в моих данных
-
@Valerax спасибо, знаю про запись запросов. Бас не видит бинарные данные по какой то причине ни в сниффере, ни в браузере в нетворк пока не включу их видимость в нем, ни в записанных запросах. Более того, он такие запросы записывает как гет запрос с методом пост(
-
@Valerax единственная проблема и вопрос - как передать бинарные данные в пост дате в басе при типе содержимого multipart/form-data. В node.js это делается без танцев с бубном, а тут я уже второй день не могу понять в каком виде должны быть данные - в бинарном в файлах .bin, или в бинарном в base64 в переменных и как это потом отослать в пост дате. Я и то и другое пробовал через добавление файла, через бейс64 и как угодно, но по какой то причине не работает и не передаются данные либо вообще, либо должным образом. В node.js те же данные передаются в запросе корректно
-
Вопрос решен, большое спасибо за советы
Если есть бинарный файл .bin и нужно его отправить в пост дате в мультипарт/дата, то можно просто читать его в base64 в переменную, далее эту переменную указывать в пост дате
------WebKitFormBoundary[[RANDOM_STRING]] Content-Disposition: form-data; name="то что у вас"; filename="то что вам нужно, тут не особо важно" Content-Type: application/octet-stream base64:тут ваша переменная с бинарными данными в бейс64 ------WebKitFormBoundary[[RANDOM_STRING]]--Я же пытался изначально ставить туда в пост дату путь к файлу