QHttpMultiPart:将文件发布到PHP脚本
我在Qt5中工作,正在努力实现多部分上传。我的脚本尽可能接近以下内容:QHttpMultiPart:将文件发布到PHP脚本,php,qt,qt5,qt4.8,qtnetwork,Php,Qt,Qt5,Qt4.8,Qtnetwork,我在Qt5中工作,正在努力实现多部分上传。我的脚本尽可能接近以下内容: QUrl testUrl("http://localhost/upload/test.php"); QNetworkRequest request(testUrl); QHttpMultiPart *multiPart = new QHttpMultiPart(QHttpMultiPart::FormDataType); QString preview_path = "C:/preview.jpg"; QH
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;
我的进度槽显示了大致正确的上传字节数
但结果显示:
preview_path: C:/preview.jpg
preview_file exists: true
$_FILES: Array
(
)
preview_file content: ????
看起来字节是作为$\u POST变量提交的,而不是应该作为$\u文件提交的?apache日志中没有错误。如何调试此问题?已解决
感谢您的提示-我在QHttpPart的内容配置中添加了“filename”,现在它可以按预期上传了。我认为文件名是可选的,但在这种情况下似乎有效。希望这对其他人有帮助
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 + "\""));
我的PHP是这样说的:
警告:多部分/表单数据中缺少边界在第0行的未知中发布数据
有什么方法可以调试它吗?
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 + "\""));