Добрый день, есть форма
<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();
решило проблему.