Russian Qt Forum
Май 21, 2024, 19:53 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Загрузка файлов  (Прочитано 1963 раз)
Nerfair
Гость
« : Июнь 15, 2012, 02:42 »

Добрый день, есть форма

Код:
<form enctype="multipart/form-data" action="upload.php" method="POST">
<input name="text" type="text" />
<input name="file" type="file" />
<input type="submit" value="Upload File" />
</form>

И есть код Qt

Код:
QString fileString = "d://Users//Nullified//Desktop//speaker.png";
    QFileInfo fileInfo(fileString);

    if(!fileInfo.exists()) { qDebug() << QString("File not found. \n\n"); }

    qDebug() << QString(fileInfo.fileName());
    qDebug() << QString(fileInfo.suffix().toLower());
    qDebug() << QString(fileInfo.absoluteFilePath());

    QString bound="---------------------------29658227049930";
    QByteArray data(QString("--" + bound + "\r\n").toAscii());
    data += "Content-Disposition: form-data; name=\"text\"\r\n\r\n";
    data += QString("Text variable\n\n").toAscii();
    data += "\r\n";
    data += QString("--" + bound + "\r\n").toAscii();
    data += "Content-Disposition: form-data; name=\"file\"; filename=\"" + fileInfo.fileName() + "\"\r\n";
    data += "Content-Type: image/" + fileInfo.suffix().toLower() + "\r\n\r\n";

    QFile file(fileInfo.absoluteFilePath());
    file.open(QIODevice::ReadOnly);
    data += file.readAll();
    file.close();

    data += QString("--" + bound + "--").toAscii(); // Добавлено при редактировании, начали загружаться .txt файлы
    data += "\r\n";


    QUrl url(URLaddress);
    QNetworkRequest request(url);
    request.setRawHeader(QString("Accept-Encoding").toAscii(), QString("gzip, deflate").toAscii());
    request.setRawHeader(QByteArray("Content-Type"),QString("multipart/form-data; boundary=" + bound).toAscii());
    request.setRawHeader(QByteArray("Content-Length"), QString::number(data.length()).toAscii());

Так вот POST переменная text проходит и выводится нормально, а зараза файл ни в какую загружаться не собирается.
Хотя Content-Lenght показывает размер передаваемой информации с учетом размера файла.

Вывод программы


p.s. PHP код страницы
Код:
if(isset($_POST['text'])) {
echo "POST text is: " . $_POST['text'];
}
elseif (isset($_GET['text'])) {
echo "GET text is: " . $_GET['text'];
}
else {
echo "";
echo "No text;";
echo "";
}

echo "<pre>";
print_r(getallheaders());
echo "</pre>";

Что я делаю не так?


--

Если взять .jpg файл и изменить
Код:
data += "Content-Type: image/jpeg\r\n\r\n";
ситуация не меняется. Файл все так же не загружается.

--

Добавил "закрывающий" boundary
Код:
    data += QString("--" + bound + "--").toAscii();
Получилось загружать .txt файлы, картинки все так же не загружаются.

--

Добавление
Код:
    data += "\r\n";
    data += "\r\n";
    data += QString("--" + bound + "\r\n").toAscii();
    data += QString("--" + bound + "\r\n").toAscii();
решило проблему.
« Последнее редактирование: Июнь 15, 2012, 03:41 от Nerfair » Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4732



Просмотр профиля WWW
« Ответ #1 : Июнь 15, 2012, 03:39 »

а где в коде data устанавливается для request? я там вижу только заголовки.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Nerfair
Гость
« Ответ #2 : Июнь 15, 2012, 03:41 »

а где в коде data устанавливается для request? я там вижу только заголовки.

Тем не менее,
Код:
    data += "\r\n";
    data += "\r\n";
    data += QString("--" + bound + "\r\n").toAscii();
    data += QString("--" + bound + "\r\n").toAscii();

Решило проблему, теперь грузит все, картинки, docx, txt Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.055 секунд. Запросов: 23.