Как отправлять бинарные данные в 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-stream

    base64:[[VARIABLE_WITH_BASE64_ENCODING]]
    --randomstringboundary--

  • с multipart лучше запрос составлять через

    image.png
    Удобнее будет

  • @usertrue спасибо большое, сделал как вы сказали, но к сожалению все равно не помогло. В ответе получаю в хедере total-bytes: 0 (показатель того, что не прочитало мой кусок бинарки этот) и в сниффере баса не видно что я в пост дате отправил, предположу что из за бинарки. Сейчас пост дата выглядит у меня следующим образом

    ------geckoformboundaryec956ef896cab4c92fc105aa20a2e20
    Content-Disposition: form-data; name="media"; filename="blob"
    Content-Type: application/octet-stream

    base64:[[LIST_ELEMENT]]
    ------geckoformboundaryec956ef896cab4c92fc105aa20a2e20--

    В переменной [[LIST_ELEMENT]] точно содержится бинарка в бейс64. Чуть позже проверю через wireshark чтобы знать точно, но пока что ощущение что как то не так я бинарные данные передаю и можно проще :(

  • @Valerax спасибо большое за совет, но уже попробовал и не увенчалось успехом :(

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

  • @redwine включи запись запросов в басе и отправь нужный тебе запрос, глянь как он выглядит в басе, там поймешь где проблема.

  • @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]]--
    

    Я же пытался изначально ставить туда в пост дату путь к файлу

  • @redwine дай сайт и напиши где видос грузить

  • @Valerax Уже решил, проблема была в том что я в запросе указывал путь к бинарному файлу, а нужно было читать этот файл в бейс64 в переменную и указывать эту переменную

  • 0 Votes
    3 Posts
    507 Views
  • 0 Votes
    2 Posts
    741 Views
  • 0 Votes
    3 Posts
    966 Views
  • 0 Votes
    15 Posts
    1589 Views
  • 0 Votes
    4 Posts
    930 Views