#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);
}
}
Эта работа для меня ,я гость, вам нужно изменить место для поста.