Intereting Posts
Сортировка и отображение списка каталогов по алфавиту с помощью opendir () в php Проблемная проблема – сортировка XML-данных с использованием PHP PHP: Как добавить новую строку вверху файла csv с помощью fputcsv? HTML в символах формы Symfony2 вместо обычного текста Как добавить разрыв строки в echo в PHP? Как удалить строки строки (без символов!) Из строки? CakePHP 1.3 – Неизвестная колонка в разделе where Использование PHP и Google Maps Api для определения расстояния между двумя почтовыми кодами (Великобритания) Замените подстроку, которая находится между квадратными скобками с помощью php regex MYSQL возвращает пустой результат в PHP Доступ к значению массива внутри объекта в PHP Замена изображения src в тегах HTML? Перегрузка класса поставщика symfony2 для установки параметра curl verify_peer в значение false Установите lang по умолчанию, используя php Кэширование подготовленных отчетов PDO

QHttpMultiPart: отправлять файлы в скрипт PHP

Я работаю в Qt 5 и борюсь с многостраничной загрузкой. Мой сценарий как можно ближе к документам :

QUrl testUrl("http://localhost/upload/test.php"); QNetworkRequest request(testUrl); QHttpMultiPart *multiPart = new QHttpMultiPart(QHttpMultiPart::FormDataType); QString preview_path = "C:/preview.jpg"; QHttpPart previewPathPart; previewPathPart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"preview_path\"")); previewPathPart.setBody(preview_path.toLatin1()); QHttpPart previewFilePart; previewFilePart.setHeader(QNetworkRequest::ContentTypeHeader, QVariant( "image/jpeg")); previewFilePart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"preview_file\"")); QFile *file = new QFile(preview_path); if (!file->exists()) { emit error(tr("Upload Error. File does not exist: ") + preview_path); return; } file->open(QIODevice::ReadOnly); previewFilePart.setBodyDevice(file); file->setParent(multiPart); // we cannot delete the file now, so delete it with the multiPart multiPart->append(previewPathPart); multiPart->append(previewFilePart); reply = networkManager->post(request, multiPart); multiPart->setParent(reply); // delete the multiPart with the reply connect(reply, SIGNAL(finished()), this, SLOT (uploadReply())); connect(reply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT (uploadError(QNetworkReply::NetworkError))); connect(reply, SIGNAL(uploadProgress(qint64, qint64)), this, SLOT (uploadProgress(qint64, qint64))); 

то мой слот uploadReply () просто печатает ответ:

 QString data = (QString) reply->readAll(); qDebug() << data; 

Я сделал сценарий загрузки максимально простым и работает в XAMPP с Apache / 2.2.21 и PHP 5.3.8. Мои upload_max_filesize и post_max_size – 1000M.

 echo "preview_path: " . (isset($_POST['preview_path']) ? $_POST['preview_path'] : "not set") . "\r\n"; echo "preview_file exists: " . (isset($_POST['preview_file']) ? "true" : "false" ). "\r\n"; echo '$_FILES: '; print_r($_FILES); echo "preview_file content: " . $_POST['preview_file']; 

мой временной интервал показывает приблизительное количество загружаемых байтов.

Но вывод показывает:

  preview_path: C:/preview.jpg preview_file exists: true $_FILES: Array ( ) preview_file content: ???? 

Кажется, что байты передаются как переменная $ _POST, а не $ _FILE, как и должно быть? В журнале apache нет ошибок. Как я могу отладить это?

Solutions Collecting From Web of "QHttpMultiPart: отправлять файлы в скрипт PHP"

Решено!

Благодаря этому вопросу для подсказки я добавил «filename» к размещению содержимого для QHttpPart, и теперь он загружается, как ожидалось. Я думал, что имя файла необязательно, но, похоже, работает в этом случае. Надеюсь, это поможет кому-то еще!

 QString preview_name = "preview.jpg"; QHttpPart previewFilePart; previewFilePart.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("image/jpeg")); previewFilePart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"preview_file\"; filename=\""+ preview_name + "\""));