1 / 1 / 0
Регистрация: 11.09.2013
Сообщений: 28
1

При загрузке на ftps сервер используя Libcurl загружается пустой файл

07.07.2015, 13:46. Показов 858. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
написал простейший менеджер для работы с ftps используя библиотеку libcurl ( Так же использую qt )
C++ (Qt)
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
#include "ftpsfilemanager.h"
#include <QIODevice>
#include <QSharedPointer>
#include <QUrl>
#include <QDebug>
 
// bytes
#define FTPS_CHUNK_SIZE 1024
 
FtpsFilemanager::FtpsFilemanager(const QUrl &url)
{
    m_url = url;
    curl_global_init(CURL_GLOBAL_DEFAULT);
 
    m_curl = curl_easy_init();
    curl_easy_setopt(m_curl, CURLOPT_USE_SSL, CURLUSESSL_ALL);
    curl_easy_setopt(m_curl, CURLOPT_VERBOSE, 1L);
 
 
    curl_easy_setopt(m_curl, CURLOPT_USERNAME, url.userName().toStdString().c_str() );
    curl_easy_setopt(m_curl, CURLOPT_PASSWORD, url.password().toStdString().c_str() );
    curl_easy_setopt(m_curl, CURLOPT_PORT , url.port() );
 
 
    curl_easy_setopt(m_curl, CURLOPT_SSL_VERIFYHOST, 1);
    curl_easy_setopt(m_curl, CURLOPT_SSL_VERIFYPEER, 1);
    curl_easy_setopt(m_curl, CURLOPT_VERBOSE, 1);
 
 
 
    curl_easy_setopt(m_curl, CURLOPT_FTP_CREATE_MISSING_DIRS, 1 );
 
 
 
    m_tmpFile = QSharedPointer<QIODevice>(new QTemporaryFile());
    m_tmpFileData = m_tmpFile.data();
 
    if(!m_tmpFileData->open(QIODevice::ReadWrite))
    {
        m_error = "can't open temp file";
    }
 
 
 
 
}
 
FtpsFilemanager::~FtpsFilemanager()
{
    curl_easy_cleanup(m_curl);
    curl_global_cleanup();
}
 
bool FtpsFilemanager::mkpath(const QString &path)
{
 
 
 
    return true;
}
 
bool FtpsFilemanager::putfile(const QString &filename, const QByteArray &data)
{
 
    /* enable uploading */
    curl_easy_setopt(m_curl, CURLOPT_UPLOAD, 1);
    /* specify target */
    qDebug() << "Upload to " + m_url.toString() + "/" + filename;
    curl_easy_setopt(m_curl, CURLOPT_URL, QString(m_url.toString() + "/" + filename).toStdString().c_str());
 
    curl_easy_setopt(m_curl, CURLOPT_READFUNCTION,reader);
    curl_easy_setopt(m_curl, CURLOPT_READDATA,&data);
 
 
 
    m_code = curl_easy_perform(m_curl);
    if(m_code != CURLE_OK)
    {
        m_error = "upload error";
        return false;
    }
 
    return true;
}
 
bool FtpsFilemanager::putfile(const QString &filename, const QString &data)
{
 
    return true;
}
 
QString FtpsFilemanager::destUrl()
{
 
    return true;
}
 
QSharedPointer<QIODevice> FtpsFilemanager::getFile(const QString &path)
{
 
    /* disable uploading */
    curl_easy_setopt(m_curl, CURLOPT_UPLOAD, 0);
 
    /* specify target */
    qDebug() << "Download file " + m_url.toString() + "/" + path;
    curl_easy_setopt(m_curl, CURLOPT_URL, QString(m_url.toString() + "/" + path).toStdString().c_str());
 
    curl_easy_setopt(m_curl, CURLOPT_WRITEFUNCTION,writer);
    curl_easy_setopt(m_curl, CURLOPT_WRITEDATA,m_tmpFileData);
 
 
 
 
    m_code = curl_easy_perform(m_curl);
    if(m_code != CURLE_OK)
    {
        m_error = "upload error";
        return QSharedPointer<QIODevice>( new QTemporaryFile());
    }
 
 
    return m_tmpFile;
}
 
int FtpsFilemanager::writer(char *data, size_t size, size_t nmemb, QIODevice *buffer)
{
    qDebug() << "DATA:" << data;
    int result = 0;
    if (buffer != NULL)
    {
      buffer->write(data);
      result = size * nmemb;
    }
    return result;
}
 
size_t FtpsFilemanager::reader(char *data, size_t size, size_t nmemb, QByteArray *src)
{
  //  qDebug() << "get:" << data << " AND " << *src;
    int result = 0;
    if(src!=NULL)
    {
        QByteArray chunk = src->mid(0,FTPS_CHUNK_SIZE);
        qDebug() << chunk;
        data = chunk.data();
        qDebug() << "input" << data;
        result = chunk.size();
 
        src->remove(0,FTPS_CHUNK_SIZE);
    }
    return result;
}
проблема в том,что при загрузке файла на сервер он пустой,точнее содержит только пробелы,хотя и размер совпадает с исходным,в чём может быть проблема?

Добавлено через 1 час 11 минут
проблема решена,всё дело было в том что я сглупил
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.07.2015, 13:46
Ответы с готовыми решениями:

При загрузке RTF-файла загружается пустой текст
Есть готовый вордовский документ, который позже я даже в rtf файл перенёс чтобы избежать ошибок, но...

При множественной загрузке файлов на сервер загружается лишь один.
доброе время суток. такая ситуация: загружаю несколько файлов через &lt;input type=&quot;file&quot; multiple /&gt;,...

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

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

1
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
13.07.2015, 02:01 2
Цитата Сообщение от NewFag Посмотреть сообщение
url.userName().toStdString().c_str()
Опасно.

curl хорошо но есть спец. классы для Qt
0
13.07.2015, 02:01
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.07.2015, 02:01
Помогаю со студенческими работами здесь

Файл загружается в директорию, но он пустой
Файл загружается в директорию, но он, можно сказать, пустой...может в коде еще чего то не хватает..?

При загрузке файла на ftp-сервер - ошибка 553 (не могу создать файл)
Здравствуйте товарищи, я пытаюсь загрузить файл через ftp на свой сервер, пишет мне ошибку 553...

При загрузке Windows XP пустой рабочий стол
После ввода пароля пустой рабочий стол, звук приветствия, звук прощания и снова ввод пароля. Бил...

Пустой photos_list при загрузке фотографии в альбом. Почему?
Здравствуйте! Имеется вот такой вот код, который позволяет загружать картинку прямиком в нужный...

Не загружается файл на сервер
Здравствуйте уважаемые программисты, у меня такая проблема не загружается файл на сервер....

Не загружается файл на сервер
Всем доброй ночи:) Пытаюсь сделать загрузку файлов на сервер,а именно загрузку...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru