Форум программистов, компьютерный форум, киберфорум
C (Си)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 Аватар для samorodov
0 / 0 / 0
Регистрация: 08.03.2013
Сообщений: 11

CURL - Загрузка файла на сервер

21.11.2016, 04:52. Показов 1469. Ответов 0
Метки curl, url (Все метки)

Author24 — интернет-сервис помощи студентам
Есть следующая функция, призванная отправлять файл 333.txt на Яндекс диск

C Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
int upload(link){
    unsigned char * D;
    int arr,R = 0;
    CURL *curl;
    CURLcode res;
    curl = curl_easy_init();
    FILE * F = fopen("333.txt","rb");
    fseek(F,0,SEEK_END);
    long size = ftell(F)+1;
    fseek(F,0,SEEK_SET);
    D = (unsigned char*)malloc(size*sizeof(unsigned char));
    while ( ( arr = fread(D+R, 1, BUF_BLOK, F) ) > 0 ){R+=arr;}
    *(D+R+1)='\0';
    fclose(F);
 
    if(curl) {
        curl_easy_setopt(curl, CURLOPT_URL, link);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PUT");
        curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0);
        curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, D);
        res = curl_easy_perform(curl);
        if(res != CURLE_OK)
          printf("curl_easy_perform() failed: %s\n",curl_easy_strerror(res));
        else{
          printf("%s",ToRus("Все оК"));
        }
        curl_easy_cleanup(curl);
    }
    free(D);
    return 0;
}
Она работает как надо, но только с текстовыми файлами. Проблемы происходят при передачи картинок, аудио и видео файлов - передается лишь малая часть, а если быть точнее только первые несколько байт. Знаю что следует копать в сторону кодировки символов массива D.

Однако, имеется схожий код, но только на php:

PHP Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    $file = '222.jpg';
    $link = (require 'keepupurl.php');
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $link);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($ch, CURLOPT_POSTFIELDS, file_get_contents($file));
    $answer = curl_exec($ch);
    $info = curl_getinfo($ch);
    curl_close($ch);
    if ($info['http_code'] != '201') {echo 'Error';}
    else {echo 'OK';}
Так вот он работает со всеми типами файлов. Я стал смотреть на кодировку символов получаемых в file_get_contents($file) и
увидел полную идентичность с символами из fread().

Долгие поиски решения проблемы ни к чему (хорошему) не привили. Возможно ли, что проблема состоит в версии курл библиотеки?

Добавлено через 38 минут
Ёксель моксель! Проблема решена добавлением в код строчки, указывающей размер передаваемых данных.
C Скопировано
1
curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE , R);
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.11.2016, 04:52
Ответы с готовыми решениями:

Загрузка картинки на сервер через curl
Я успешно получил url сервера для загрузки(photos.getWallUploadServer). Далее пытаюсь отправить ПОСТ запрос: $ch = curl_init(); ...

Загрузка файла через curl, а вместо файла страница с кроказабярами
Скачиваю файл через curl, а вместо него вылазает страница с крокозябрами HTTP/1.1 100 Continue HTTP/1.1 200 OK Server: nginx Date: Sat, 16...

Загрузка файла в curl
Делаю загрузку картинок на хостинг через сайт, после запрос возвращает xml где указано что файл не загружен, подскажите как в curl ...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.11.2016, 04:52
Помогаю со студенческими работами здесь

загрузка файла на сервер с вашего сайта на чужой сервер под вашим логином!
Извените зараннее если ошибся разделом, не нашел куда можно отнести данную тему и посчитал как вариат написать в этот раздел, так вот: ...

Загрузка файла на сервер
Что не так? В папку LoadingFile ничего не загружается. @using Microsoft.Web.Helpers; @{ Layout =...

Загрузка файла на сервер
Привет всем. Подскажите, пожалуйста решение. Скрипт загрузки файла на сервер, рабочий: $uploaddir = 'uploads/'; $uploadfile =...

Загрузка файла на сервер
Народ я в php вобще новичок, создал сервер http://nfots.zz.mu/ и пробую загрузить туда файл с компьютера но ни как не получается. На сервер...

Загрузка файла на сервер
Всем привет. Вот хочу сделать чтоб можно было загружать совершенно любой тип файлов на сервер и чтоб информация такая как: адрес на этот...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Как работает Node.js изнутри
run.dev 29.03.2025
Node. js изменил подход к разработке веб-приложений, позволив использовать JavaScript не только на стороне клиента, но и на сервере. Созданный в 2009 году Райаном Далем, этот открытый,. . .
Моки в Python: Mock Object Library
py-thonny 29.03.2025
Тестирование кода требует особого подхода, когда речь идёт о компонентах, взаимодействующих с внешним миром. Мы часто сталкиваемся с непредсказуемостью HTTP-запросов, чтением данных из базы или. . .
JavaScript: Управление памятью и улучшение производительности
run.dev 29.03.2025
В отличие от низкоуровневых языков программирования, JavaScript не требует ручного выделения и освобождения памяти. Здесь работает автоматический сборщик мусора, который определяет, какие объекты. . .
Мультитенантная архитектура со SpringBoot и PostgreSQL
ArchitectMsa 29.03.2025
SaaS-приложения редко обслуживают одного клиента и обычно они должны поддерживать множество организаций, каждая из которых работает в своём изолированном пространстве. Мультитенантная архитектура. . .
std::span в C++: Производительность и лучшие практики
NullReferenced 28.03.2025
std::span — одно из самых недооценённых нововведений стандарта C++20, которое радикально меняет подход к работе с непрерывными последовательностями данных. По сути, это невладеющее представление. . .
Многопоточность в C#: Threadpool
UnmanagedCoder 28.03.2025
Пул потоков в C# — это коллекция заранее созданных и готовых к использованию потоков, которые находятся в распоряжении приложения. Вместо того чтобы создавать и уничтожать потоки для каждой небольшой. . .
Вопросы на собеседованиях по микросервисам
ArchitectMsa 27.03.2025
Работодатели ищут не просто разработчиков, знающих базовые концепции, а специалистов, разбирающихся в тонкостях масштабирования, отказоустойчивости и производительности. Сейчас на первый план выходят. . .
Взаимодействие Python с REST API
py-thonny 27.03.2025
REST API - это архитектурный стиль взаимодействия компонентов распределённого приложения в сети. Python располагает функциональным набором инструментов для работы с REST API и основная библиотека для. . .
sshd restrictions, ssh access limitations
jigi33 26.03.2025
sshd restrictions | ssh access limitations рестрикции доступа на сервер sshd статья: https:/ / www. golinuxcloud. com/ restrict-allow-ssh-certain-users-groups-rhel подробные расшифровки по. . .
Компиляция C++ с Clang API
NullReferenced 24.03.2025
Компиляторы обычно воспринимаются как черные ящики, которые превращают исходный код в исполняемые файлы. Мы запускаем компилятор командой в терминале, и вуаля — получаем бинарник. Но что если нужно. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер