From dabdd089d06f031aecf1724148567f400e7aa2ad Mon Sep 17 00:00:00 2001 From: dab246 Date: Sat, 6 Aug 2022 19:44:31 +0700 Subject: [PATCH] TF-654 Create AnchorElement for download file on browser --- .../network/download/download_manager.dart | 46 +++++++------------ 1 file changed, 16 insertions(+), 30 deletions(-) diff --git a/core/lib/data/network/download/download_manager.dart b/core/lib/data/network/download/download_manager.dart index 02c26bbe5..a12e0df21 100644 --- a/core/lib/data/network/download/download_manager.dart +++ b/core/lib/data/network/download/download_manager.dart @@ -1,13 +1,12 @@ import 'dart:async'; import 'dart:io'; +import 'dart:typed_data'; -import 'package:core/data/network/dio_client.dart'; import 'package:core/data/network/download/download_client.dart'; import 'package:core/data/network/download/downloaded_response.dart'; import 'package:core/domain/exceptions/download_file_exception.dart'; import 'package:core/utils/app_logger.dart'; import 'package:dio/dio.dart'; -import 'package:http/http.dart' as http; import 'package:http_parser/http_parser.dart'; import 'package:universal_html/html.dart' as html; @@ -82,38 +81,25 @@ class DownloadManager { return streamController.stream.first; } - Future downloadFileForWeb( - String downloadUrl, - String filename, - String authentication) async { + void createAnchorElementDownloadFileWeb( + Uint8List bytes, + String filename + ) { try { - final headerParam = Map(); - headerParam[HttpHeaders.authorizationHeader] = authentication; - headerParam[HttpHeaders.acceptHeader] = DioClient.jmapHeader; + final blob = html.Blob([bytes]); + final url = html.Url.createObjectUrlFromBlob(blob); + final anchor = html.document.createElement('a') as html.AnchorElement + ..href = url + ..style.display = 'none' + ..download = filename; + html.document.body?.children.add(anchor); - http.Response res = await http.get( - Uri.parse(downloadUrl), - headers: headerParam); + anchor.click(); - if (res.statusCode == 200) { - final blob = html.Blob([res.bodyBytes]); - final url = html.Url.createObjectUrlFromBlob(blob); - final anchor = html.document.createElement('a') as html.AnchorElement - ..href = url - ..style.display = 'none' - ..download = filename; - html.document.body?.children.add(anchor); - - anchor.click(); - - html.document.body?.children.remove(anchor); - html.Url.revokeObjectUrl(url); - - return true; - } - - return false; + html.document.body?.children.remove(anchor); + html.Url.revokeObjectUrl(url); } catch (exception) { + log('DownloadManager::createAnchorElementDownloadFileWeb(): ERROR: $exception'); throw exception; } }