1

我想在我的 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);
}
4

1 回答 1

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();
}
于 2013-09-25T10:40:02.993 回答