Flutter 如何使用 googledrive api 获取将文件上传到 googledrive 的进度状态?

问题描述 投票:0回答:2

我正在使用 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;
  }
flutter upload google-drive-api flutter-web progress
2个回答
2
投票

尝试这样的事情。

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();
      },
   ),
);


0
投票

@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);
© www.soinside.com 2019 - 2024. All rights reserved.