我正在使用 google_apis v3 将文件上传到驱动器。如何通过Google Drive API库获取上传状态的进度百分比?还有如何取消上传文件?
示例源代码如下。
Future<File> uploadFile(
GoogleAuthClient googleAuthClient, FileUpload fileUpload) async {
final DriveApi driveApi = driveDataProvider.getDriveApi(googleAuthClient);
final Stream<List<int>> mediaStream =
Future.value(fileUpload.data).asStream().asBroadcastStream();
Media media = Media(mediaStream, fileUpload.size);
File createdFile = await driveApi.files.create(fileUpload.file,
uploadMedia: media, uploadOptions: UploadOptions.resumable;);
return createdFile;
}
尝试这样的事情。
int byteCount = 0;
Stream<List<int>> mediaStream = file.openRead().transform(
StreamTransformer.fromHandlers(handleData: (data, sink) {
byteCount += data.length;
//add a callback function here.
// callback(byteCount);
sink.add(data);
}, handleError: (error, stackTrace, sink) {
//Handle error
}, handleDone: (sink) {
sink.close();
},
),
);
@Werner Scholtz 的答案应该被接受。我只是想在这里记录一下在创建 google Drive Media 类型的文件时如何集成这种方法:
var media = drive.Media(
file.openRead().transform(
StreamTransformer.fromHandlers(
handleData: (data, sink) {
log('Something');
bytesUploaded += data.length;
sink.add(data);
},
handleError: (error, stackTrace, sink) {},
handleDone: (sink) {
log('Something done');
sink.close();
},
),
),
totalBytes);
我上传它:
var response = await driveApi.files.create(driveFile, uploadMedia: media);