gpt4 book ai didi

flutter - 如何使用Flutter访问Google Drive appdata文件夹文件?

转载 作者:行者123 更新时间:2023-12-02 00:09:00 25 4
gpt4 key购买 nike

我有一个非常旧的 Android 项目,我已经很长一段时间没有碰过了。它将一些用户数据存储在用户的 Google Drive appdata 文件夹中。现在我正在将应用程序更新到 Flutter 版本,由于 Google Drive API 已被弃用,所以没有适用于 Flutter 的插件,我相信我现在需要使用 googleapi。但我找不到太多关于我的 flutter 问题的信息。我已经使用 google_sign_in 登录了:^4.0.7

GoogleSignIn _googleSignIn = GoogleSignIn(
scopes: [
'email',
'https://www.googleapis.com/auth/drive.appdata',
'https://www.googleapis.com/auth/drive.file',
],
);
try {
GoogleSignInAccount account = await _googleSignIn.signIn();
} catch (error) {
print(error);
}

效果很好,但我被困在那里了。我如何从那里读取用户 Google 云端硬盘上 appdata 文件夹内的文件?

EDIT1:这个答案有帮助,我设法获得了 httpClient,但我仍然坚持如何获取 appdata 文件夹及其文件 How to use Google API in flutter?

googleapi 似乎不支持 appfolder,因为 Google 将来可能会弃用它(似乎他们已经这样做了),以迫使我们支付使用 firebase 的存储费用。好的,很好,但是如果我无法通过 googleapi 访问该文件夹,我该如何迁移它?如果我现在重置我的应用程序并且我的用户丢失了所有数据,我将失去我拥有的少数用户......

最佳答案

以下内容对我有用,(使用 http 包进行 getpost)

身份验证 token

您可以从 signIn 返回的帐户中检索身份验证 token 。

Future<String> _getAuthToken() async {
final account = await sign_in_options.signIn();
if (account == null) {
return null;
}
final authentication = await account.authentication;
return authentication.accessToken;
}

搜索

要搜索 AppData 目录中的文件,您需要添加 spaces 查询参数并将其设置为 appDataFolder。该文档在这方面有点误导。

final Map<String, String> queryParameters = {
'spaces': 'appDataFolder',
// more query parameters
};
final headers = { 'Authorization': 'Bearer $authToken' };
final uri = Uri.https('www.googleapis.com', '/drive/v3/files', queryParameters);
final response = await get(uri, headers: headers);

上传

要上传文件,您需要将初始上传请求正文的 parents 设置为 appDataFolder 属性。要下载文件,您只需要 fileId。

final headers = { 'Authorization': 'Bearer $authToken' };
final initialQueryParameters = { 'uploadType': 'resumable' };
final Map<String, dynamic> metaData = {
'name': fileName,
'parents': ['appDataFolder ']
};
final initiateUri = Uri.https('www.googleapis.com', '/upload/drive/v3/files', initialQueryParameters);
final initiateResponse = await post(initiateUri, headers: headers, body: json.encode(metaData));
final location = initiateResponse.headers['location'];

下载

要下载文件,您只需要知道fileId,如果您不知道,则需要使用搜索 API 来检索它(见上文)。

final headers = { 'Authorization': 'Bearer $authToken' };
final url = 'https://www.googleapis.com/drive/v3/files/$fileId?alt=media';
final response = await get(url, headers: headers);

关于flutter - 如何使用Flutter访问Google Drive appdata文件夹文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58072743/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com