Следующее работает для меня, (используя пакет http для get
и post
)
Auth Token
Youможет получить токен аутентификации из accoutn, возвращенного signIn
.
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
queryParameters и установите его в 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
тело для первоначального запроса на загрузку.Для загрузки файла вам нужен только идентификатор файла.
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);