Qt 如何使用v3 rest api从google drive下载文件?
我的目标:使用google drive v3 rest api从google drive下载sqlite文件 我正在进行一个项目,该项目涉及下载一个存储在GoogleDrive中的sqlite文件。到目前为止,我已经成功地授权和获取访问令牌。我还幸运地获得了谷歌硬盘中存储的所有文件名(sqlite文件)及其各自的文件id。现在我想使用文件id下载文件。我按照,并发送带有文件id的请求。但我得到的只是Qt 如何使用v3 rest api从google drive下载文件?,qt,google-drive-api,qt5,Qt,Google Drive Api,Qt5,我的目标:使用google drive v3 rest api从google drive下载sqlite文件 我正在进行一个项目,该项目涉及下载一个存储在GoogleDrive中的sqlite文件。到目前为止,我已经成功地授权和获取访问令牌。我还幸运地获得了谷歌硬盘中存储的所有文件名(sqlite文件)及其各自的文件id。现在我想使用文件id下载文件。我按照,并发送带有文件id的请求。但我得到的只是 { "kind": "drive#file", "id": "1AmaXWbtmkvihy1
{
"kind": "drive#file",
"id": "1AmaXWbtmkvihy1g9yoYSSCssgL4fVh6t",
"name": "_db.sqlite",
"mimeType": "application/octet-stream"
}
这是我的代码:
bool File_Control::Download_File(const QString &FileName)
{
// Get FileID
QString FileID = m_Map.value(FileName, QString());
if(FileID.isEmpty()){
emit setMessage("Fatal Error: FileID is missing for FileName");
return false;
}
qDebug()<<"File ID "<<FileID;
// Now Prepare the request
QUrl url(tr("https://www.googleapis.com/drive/v3/files/%1").arg(FileID));
QUrlQuery query;
query.addQueryItem("alt","media");
url.setQuery(query.query());
QNetworkRequest request(url);
QString headerData = "Bearer " + m_Settings->get_Google_Drive_Settings
(Google_Drive::AccessTokenEnum);
request.setRawHeader("Authorization", headerData.toLocal8Bit());
QNetworkReply *reply = m_Account->get_Request(request);
// Now wait for the response
QTime t1 = QTime::currentTime().addMSecs(TIMEOUT);
while((t1>QTime::currentTime()) && (!reply->isFinished())){
QCoreApplication::processEvents();
}
if(reply->isFinished())
{
if(reply->error() != QNetworkReply::NoError){
emit setMessage("Error: "+reply->errorString());
delete reply;
return false;
}
else{
QByteArray array = reply->readAll();
qDebug()<<array<<reply->error();
delete reply;
return true;
}
}
else{
emit setMessage("Error: Timeout");
delete reply;
return false;
}
}
bool文件控制::下载文件(const QString&FileName)
{
//获取文件ID
qstringfileid=m_Map.value(文件名,QString());
if(FileID.isEmpty()){
emit setMessage(“致命错误:文件名缺少FileID”);
返回false;
}
qDebug()已完成()){
QCoreApplication::processEvents();
}
如果(回复->isFinished())
{
如果(回复->错误()!=QNetworkReply::无错误){
发出setMessage(“错误:“+reply->errorString());
删除答复;
返回false;
}
否则{
QByteArray数组=回复->读取所有();
qDebug()是一种帮助器枚举类型。
m_Account->帮助授权google帐户的对象。此对象包含我的QNetworkManager,因此我创建了一个名为get_Request的函数来获取我的“get Request”最初我没有将alt
设置为media
,因此这解释了我首先得到的响应。然后我设置了代码中所示的值
问题是,我试图在调试控制台中查看QByteArray的内容。由于数组包含二进制数据,Qt没有显示任何字符,我认为Google发送了一个空数据包
更糟糕的是,我读了这篇文章,并试图在我的浏览器中重现它。所以我得到了错误代码400
最后,我考虑检查数组的大小,令我惊讶的是,它与驱动器上原始文件的大小相同。然后我将数组的内容保存到本地文件,并检查了SQLite文件,一切正常。请提供有关m_Map
,m_设置
,Googl的详细信息e_Drive
和m_帐户
@scopchanov请检查我的编辑。谢谢!@scopchanov感谢您的时间:)发布的魔力:)我很高兴您解决了这个问题。请将解决方案作为答案发布。@scopchanov回复发布!谢谢:)