我想在我的Qt应用程序中获取托管在Amazon S3上的文件的文件大小。
以下代码适用于非S3文件,但对于已签名的S3链接,它会打印出QVariant(Invalid)
似乎Content-Length不在S3 HTTP标头中...所以如何获取文件大小?
void MainWindow::requestFileSize(QString url)
{
QNetworkRequest req;
m_netmanager = new QNetworkAccessManager(this);
QUrl strict_url = QUrl::fromEncoded(url.toStdString().c_str(),QUrl::StrictMode);
req.setUrl(strict_url);
m_reply = m_netmanager->head(req);
connect(m_reply, SIGNAL(metaDataChanged()), this, SLOT(fileSize()));
}
void MainWindow::fileSize()
{
qDebug() << "Content Length: " << m_reply->header(QNetworkRequest::ContentLengthHeader);
}
答案 0 :(得分:0)
我已经想出如何解决这个问题。
看起来Amazon S3不允许您在头部请求中看到整个HTTP标头...但您可以执行GET,检索标头然后删除回复而不会获取任何正文。
这有效:
void MainWindow::requestFileSize(const QString &url)
{
QNetworkRequest req;
m_netmanager = new QNetworkAccessManager(this);
req.setUrl(QUrl(url));
m_reply = m_netmanager->get(req);
connect(m_reply, SIGNAL(metaDataChanged()), this, SLOT(fileSize()));
}
void MainWindow::fileSize()
{
qDebug() << "Content Length: " << m_reply->header(QNetworkRequest::ContentLengthHeader);
m_reply->deleteLater();
m_netmanager->deleteLater();
}