Отправка файла из памяти (а не с диска) по HTTP с помощью libcurl - PullRequest
4 голосов
/ 27 марта 2010

Я хотел бы отправить фотографии через программу, написанную на C ++. - ХОРОШО Это работает, но я хотел бы отправить изображения с предварительно загруженного носителя на переменную char (вы понимаете, что я имею в виду? Сначала я загружаю изображения в переменную, а затем отправляю переменную), потому что теперь мне нужно указать путь к картинке на диске.

Я хотел написать эту программу на c ++, используя библиотеку curl, а не через exe. расширение. Я также нашел такую ​​программу (которая была немного изменена мной)

Ответы [ 2 ]

10 голосов
/ 12 июня 2010

CURLFORM_PTRCONTENTS - неправильное использование здесь, оно не будет создавать часть загрузки файла.

Вместо этого следует использовать CURLFORM_BUFFER для отправки изображения из уже существующего буфера в памяти.

 curl_formadd(&formpost,
          &lastptr,
          CURLFORM_COPYNAME, "send",
          CURLFORM_BUFFER, "nowy.jpg",
          CURLFORM_BUFFERPTR, data,
          CURLFORM_BUFFERLENGTH, size,
          CURLFORM_END);
1 голос
/ 27 марта 2010

Прочитайте документацию для curl_formadd: http://curl.haxx.se/libcurl/c/curl_formadd.html

В частности, в разделе «Опции»:

CURLFORM_PTRCONTENTS

с указателем на содержимое этой части, фактические данные для отправки далеко. libcurl будет использовать указатель и обратитесь к данным в вашем приложении, поэтому вы должны убедиться, что он остается до скручиваемость больше не нужна. Если данные не заканчивается NUL, или если вы хотите он должен содержать ноль байтов, вы должны установить его длина с CURLFORM_CONTENTSLENGTH.

CURLFORM_CONTENTSLENGTH

с последующим длинным указанием длины содержания. Обратите внимание, что для CURLFORM_STREAM содержимое, эта опция является обязательным.

Так что вместо

 curl_formadd(&formpost,
              &lastptr,
              CURLFORM_COPYNAME, "send",
              CURLFORM_FILE, "nowy.jpg",
              CURLFORM_END);

Вы бы хотели что-то вроде

 curl_formadd(&formpost,
              &lastptr,
              CURLFORM_COPYNAME, "send",
              CURLFORM_PTRCONTENTS, p_jpg_data,
              CURLFORM_CONTENTSLENGTH, jpg_data_len,
              CURLFORM_END);

Я предполагаю, что вы знаете, как создать p_jpg_data и прочитать данные в него, или вам нужно это объяснить?

...