Ale*_* Lo 9 backup google-drive-api flutter
我想备份用户Google Drive帐户上的备份中的数据并恢复它们。
我见过一些应用程序,例如WhatsApp,允许用户通过 Google Drive 登录并定期备份到用户云。
我不想使用firebase cloud,因为数据是由用户自己访问的,而不是其他用户访问的,如果数据很大,成本会很高。有没有可用的软件包可以做到这一点?或者教程否则如何在颤振中实现这一点?
步骤1
您需要已经创建了 Google Firebase 项目,并从 Google Developer Console 启用 Google Drive API。请注意,您需要在 Google Developer Console 中选择与在 Google Firebase 中创建的项目相同的项目。
第2步
您需要使用 google 登录才能获取 googleSignInAccount 并使用依赖项
googleapis: ^0.54.0
googleapis_auth: ^0.2.11
class GoogleHttpClient extends IOClient {
Map<String, String> _headers;
GoogleHttpClient(this._headers) : super();
@override
Future<http.StreamedResponse> send(http.BaseRequest request) =>
super.send(request..headers.addAll(_headers));
@override
Future<http.Response> head(Object url, {Map<String, String> headers}) =>
super.head(url, headers: headers..addAll(_headers));
}
Run Code Online (Sandbox Code Playgroud)
将文件上传到 Google 云端硬盘
_uploadFileToGoogleDrive() async {
var client = GoogleHttpClient(await googleSignInAccount.authHeaders);
var drive = ga.DriveApi(client);
ga.File fileToUpload = ga.File();
var file = await FilePicker.getFile();
fileToUpload.parents = ["appDataFolder"];
fileToUpload.name = path.basename(file.absolute.path);
var response = await drive.files.create(
fileToUpload,
uploadMedia: ga.Media(file.openRead(), file.lengthSync()),
);
print(response);
}
Run Code Online (Sandbox Code Playgroud)
下载谷歌云端硬盘文件
Future<void> _downloadGoogleDriveFile(String fName, String gdID) async {
var client = GoogleHttpClient(await googleSignInAccount.authHeaders);
var drive = ga.DriveApi(client);
ga.Media file = await drive.files
.get(gdID, downloadOptions: ga.DownloadOptions.FullMedia);
print(file.stream);
final directory = await getExternalStorageDirectory();
print(directory.path);
final saveFile = File('${directory.path}/${new DateTime.now().millisecondsSinceEpoch}$fName');
List<int> dataStore = [];
file.stream.listen((data) {
print("DataReceived: ${data.length}");
dataStore.insertAll(dataStore.length, data);
}, onDone: () {
print("Task Done");
saveFile.writeAsBytes(dataStore);
print("File saved at ${saveFile.path}");
}, onError: (error) {
print("Some Error");
});
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8024 次 |
| 最近记录: |