Flutter Web: Показывает прогресс при загрузке видео с помощью Dio

#flutter #file-upload #flutter-web #dio #flutter-file

Вопрос:

Я попытался загрузить видео на AWS s3 из Flutter Web, и видео было успешно загружено. Но это не показывает мне прогресс, например, сколько процентов загружено.

 uploadFile(String url, Uint8List imageBytes) async {
    BaseOptions options = new BaseOptions(
        contentType: "multipart/form-data",
        headers: {
          'Access-Control-Allow-Origin': '*',
          "Access-Control-Allow-Methods": "POST,GET,DELETE,PUT,OPTIONS",
          "Access-Control-Allow-Credentials": true,
          "Access-Control-Allow-Headers": "Origin,Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token,locale",
          'Accept': "*/*",
        },
        connectTimeout: 200000,
        receiveTimeout: 200000,
        sendTimeout: 200000,
        followRedirects: true,
        validateStatus: (status) {
          print('Status: $status');
          return status <= 500;
        });

    Dio _dio = new Dio(options);

    var file = MultipartFile.fromBytes(imageBytes).finalize();

    await _dio.put(
      url,
      data: file,
      onReceiveProgress: (int sentBytes, int totalBytes) {
        double progressPercent = sentBytes / totalBytes * 100;
        print("Progress: $progressPercent %");
        if (progressPercent == 100) {
          dispose();
        }
      },
      onSendProgress: (int sentBytes, int totalBytes) {
        double progressPercent = sentBytes / totalBytes * 100;
        print("Progress: $progressPercent %");
        if (progressPercent == 100) {
          dispose();
        }
      },
    ).then((value) {
      print("response: ${value.data}");
      print("%%%%%%");
    }).catchError((onError) {
      print(onError);
      dispose();
    });
  }
 

Я распечатал журналы внутри функции onSendProgress , onReceiveProgress но она не показывает мне никаких журналов.

Может ли кто-нибудь помочь показать прогресс в загрузке видео на сервер AWS? Пожалуйста, дайте мне знать, если кому-нибудь понадобится дополнительная информация.

Ответ №1:

импортируйте «пакет:dio/dio.dart» как dartio;

Будущий файл загрузки(сообщение) асинхронный { // просто проигнорируйте это. конечный контроллер контроля подлинности AuthController = Get.find();

 String urlFileStore =
    (authController.state as Authenticated).currentAccount.urlFileStore;
String apiTokenFileStore = (authController.state as Authenticated)
    .currentAccount
    .apiTokenFileStore;

dartio.BaseOptions options = new dartio.BaseOptions(
    contentType: "multipart/form-data",
    headers: {'Authorization': apiTokenFileStore},
    connectTimeout: 200000,
    receiveTimeout: 200000,
    sendTimeout: 200000,
    followRedirects: true,
    validateStatus: (status) {
      _logger.wtf('uploadFile Status: $status');
      return status <= 500;
    });

dartio.Dio _dio = dartio.Dio(options);

try {
  var formData = dartio.FormData.fromMap({
    'file': await dartio.MultipartFile.fromFile(message.filePath),
  });

  var response = await _dio.post(
    urlFileStore,
    data: formData,
    onSendProgress: (int sent, int total) {
      _logger.wtf('$sent $total');
    },
  );
  //update message object filePath
  _logger.v(response);
} on Exception catch (e) {
  _logger.e(e);
}
 

}

Эта работа для меня ,я гость, вам нужно изменить место для поста.