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 では、head リクエストで 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 に答える