Squeak.ru - шаблоны программирования

NodeJS Post Request с Content-Type: multipart / form-data Устранение неполадок

Я пытаюсь отправить dataUrl на клиентский сервер.

Запрос отправляется в php-скрипт с Content-Type: multipart / form-data и телом сообщения типа ключ / значение image = (dataUri string).

Если он был успешно получен, ответ отправляется 10-значным числом. В случае неудачи отправляется ответ об ошибке.

Я использую модуль datauri для создания dataurl

Если я попытаюсь сделать это через терминал, используя следующее:

val=`cat dataUri.txt` #generated via datauri module
curl -X POST -F 'image='$val http://xxx.yyyyyyy.com:8082/server/post.php

Я успешен.

При попытке использовать node и http.request у меня ужасно не получается :(. Путем проб и ошибок и множества поисковых запросов я наткнулся на --trace-ascii, который дает вам действительно подробную разбивку связи в терминале. Итак, у меня есть пытался эффективно скопировать заголовки и т. д. в надежде, что я смогу заставить его работать.

мой код запроса сейчас выглядит так:

    var body = 'image='+dataUri ;

    postOptions = {

        headers: {
          'Content-Type': 'multipart/form-data; boundary=------------------------69b2c2b9c464731d' ,
          'Content-Disposition': 'form-data; name="image"' ,
          'Content-Length': Buffer.byteLength(body) ,
          'Accept': '*/*' ,
          'Expect': '100-continue'
        } ,

        host: 'xxx.yyyyyyy.com' ,
        port: '8082' ,
        path: '/server/post.php' ,
        method: 'POST'
    } ; 

    // Set up the request
    post_req = http.request(
        postOptions, 
        function(res) {
            // 
          res.setEncoding('utf8') ;

          res.on('data', function (chunk) {
              console.log('Response: ' + chunk) ;
          }) ;

        }) ;

    // post the data
    post_req.write(body) ;
    post_req.end() ;

Это терпит неудачу каждый раз. Я заметил кое-что: в терминале Content-Length Number больше, чем то, которое я получаю с помощью Buffer.byteLength в Node, на пару сотен байт.

Извините за отсутствие информации о сервере. Я не уверен, что мне разрешено опубликовать это ...

Может ли кто-нибудь дать мне какие-либо советы, какие-либо ссылки на информацию, которую я должен прочитать, ключевые слова, что угодно на самом деле. У меня есть долгий путь к этому, я уверен, что должен использовать какой-то тип абстракции, например Express, но с чего-то нужно начинать.


Ответы:


1

догадаться. ответ находится здесь

Я неправильно использовал Content-Disposition. Он не должен быть заголовком, он должен быть частью тела сообщения (что объясняет более крупную Content-Length

правильный код:

    var boundary = '------------------------69b2c2b9c464731d'


    var body = `--${boundary}
                \nContent-Disposition: form-data; name="image"

                \nContent-type: plain/text
                \nimage=${img}
                \n${boundary}--`;

    postOptions = {

        headers: {
          'Content-Type': 'multipart/form-data; boundary='+boundary ,
          'Content-Length': Buffer.byteLength(body)
        } ,

        host: 'xxx.yyyyyyyyyy.com' ,
        port: '8082' ,
        path: '/server/post.php' ,
        method: 'POST'
    } ; 

    // Set up the request
    post_req = http.request(
        postOptions, 
        function(res) {
            // 
          res.setEncoding('utf8') ;

          res.on('data', function (chunk) {
              console.log('Response: ' + chunk) ;
          }) ;

        }) ;

    // post the data
    post_req.write(body) ;
    post_req.end() ;
17.07.2017

2

@ Ответ Андреаса помог мне, кроме одной ошибки (?)

\n${boundary}--`; можно заменить на \n--${boundary}--`;

28.09.2018
Новые материалы

Угловая структура архитектуры
Обратите внимание, что эта статья устарела, я решил создать новую с лучшей структурой и с учетом автономных компонентов: https://medium.com/@marekpanti/angular-standalone-architecture-b645edd0d54a..

«Данные, которые большинство людей используют для обучения своих моделей искусственного интеллекта, поставляются со встроенным…
Первоначально опубликовано HalkTalks: https://hacktown.com.br/blog/blog/os-dados-que-a-maioria-das-pessoas-usa-para-treinar-seus-modelos-de-inteligencia-artificial- ja-vem-com-um-vies-embutido/..

Сильный ИИ против слабого ИИ: различия парадигм искусственного интеллекта
В последние годы изучению и развитию искусственного интеллекта (ИИ) уделяется большое внимание и прогресс. Сильный ИИ и Слабый ИИ — две основные парадигмы в области искусственного интеллекта...

Правильный способ добавить Firebase в ваш проект React с помощью React Hooks
React + Firebase - это мощная комбинация для быстрого и безопасного создания приложений, от проверки концепции до массового производства. Раньше (знаете, несколько месяцев назад) добавление..

Создайте API с помощью Python FastAPI
Создание API с помощью Python становится очень простым при использовании пакета FastAPI. После установки и импорта вы можете создать приложение FastAPI и указать несколько конечных точек. Каждой..

Веселье с прокси-сервером JavaScript
Прокси-серверы JavaScript — это чистый сахар, если вы хотите создать некоторую общую логику в своих приложениях, чтобы облегчить себе жизнь. Вот один пример: Связь клиент-сервер Мы..

Получить бесплатный хостинг для разработчиков | Разместите свой сайт за несколько шагов 🔥
Статические веб-сайты — это веб-страницы с фиксированным содержанием и его постоянным содержанием. Но теперь статические сайты также обрабатывают динамические данные с помощью API и запросов...