From 2a77032c1fe97ed964682270120b92a7a0faec74 Mon Sep 17 00:00:00 2001 From: Pedro Henrique Ferreira Figueiredo Date: Wed, 6 Mar 2024 11:45:29 -0300 Subject: [PATCH 01/10] chore: added [fvm](http://fvm.app/) for managing Flutter version --- .fvmrc | 3 +++ .gitignore | 3 +++ 2 files changed, 6 insertions(+) create mode 100644 .fvmrc diff --git a/.fvmrc b/.fvmrc new file mode 100644 index 0000000..090816f --- /dev/null +++ b/.fvmrc @@ -0,0 +1,3 @@ +{ + "flutter": "3.19.2" +} \ No newline at end of file diff --git a/.gitignore b/.gitignore index bb431f0..a5b4dbb 100644 --- a/.gitignore +++ b/.gitignore @@ -73,3 +73,6 @@ build/ !**/ios/**/default.pbxuser !**/ios/**/default.perspectivev3 !/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages + +# FVM Version Cache +.fvm/ \ No newline at end of file From dd2e5484e4038973367bfa70c411b1053f4c9be6 Mon Sep 17 00:00:00 2001 From: Pedro Henrique Ferreira Figueiredo Date: Wed, 6 Mar 2024 14:29:07 -0300 Subject: [PATCH 02/10] vendor: dependency updates (from pub get) --- pubspec.lock | 32 ++++++++++++-------------------- 1 file changed, 12 insertions(+), 20 deletions(-) diff --git a/pubspec.lock b/pubspec.lock index 47c8f66..7b70f5e 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -9,14 +9,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.11.0" - charcode: - dependency: transitive - description: - name: charcode - sha256: "8e36feea6de5ea69f2199f29cf42a450a855738c498b57c0b980e2d3cca9c362" - url: "https://pub.dev" - source: hosted - version: "1.2.0" collection: dependency: transitive description: @@ -29,18 +21,18 @@ packages: dependency: "direct main" description: name: dio - sha256: a9d76e72985d7087eb7c5e7903224ae52b337131518d127c554b9405936752b8 + sha256: "49af28382aefc53562459104f64d16b9dfd1e8ef68c862d5af436cc8356ce5a8" url: "https://pub.dev" source: hosted - version: "5.2.1+1" + version: "5.4.1" http_parser: dependency: transitive description: name: http_parser - sha256: e362d639ba3bc07d5a71faebb98cde68c05bfbcfbbb444b60b6f60bb67719185 + sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" url: "https://pub.dev" source: hosted - version: "4.0.0" + version: "4.0.2" meta: dependency: transitive description: @@ -61,34 +53,34 @@ packages: dependency: transitive description: name: source_span - sha256: d5f89a9e52b36240a80282b3dc0667dd36e53459717bb17b8fb102d30496606a + sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" url: "https://pub.dev" source: hosted - version: "1.8.1" + version: "1.10.0" string_scanner: dependency: transitive description: name: string_scanner - sha256: dd11571b8a03f7cadcf91ec26a77e02bfbd6bbba2a512924d3116646b4198fc4 + sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" url: "https://pub.dev" source: hosted - version: "1.1.0" + version: "1.2.0" term_glyph: dependency: transitive description: name: term_glyph - sha256: a88162591b02c1f3a3db3af8ce1ea2b374bd75a7bb8d5e353bcfbdc79d719830 + sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 url: "https://pub.dev" source: hosted - version: "1.2.0" + version: "1.2.1" typed_data: dependency: transitive description: name: typed_data - sha256: "53bdf7e979cfbf3e28987552fd72f637e63f3c8724c9e56d9246942dc2fa36ee" + sha256: facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c url: "https://pub.dev" source: hosted - version: "1.3.0" + version: "1.3.2" universal_io: dependency: "direct main" description: From 8a6579a18fb5d8dbfc85dce2527443cc27ce4f68 Mon Sep 17 00:00:00 2001 From: Pedro Henrique Ferreira Figueiredo Date: Wed, 6 Mar 2024 14:29:47 -0300 Subject: [PATCH 03/10] feat(wip): added streaming upload capability... further testing needed --- lib/chunked_uploader.dart | 49 +++++++++++++++++++++++++-------------- 1 file changed, 32 insertions(+), 17 deletions(-) diff --git a/lib/chunked_uploader.dart b/lib/chunked_uploader.dart index 5043b77..8330e7e 100644 --- a/lib/chunked_uploader.dart +++ b/lib/chunked_uploader.dart @@ -54,6 +54,7 @@ class ChunkedUploader { ChunkHeadersCallback? headersCallback, String method = 'POST', String fileKey = 'file', + bool stream = false, }) => _Uploader.fromFilePath( _dio, @@ -67,7 +68,7 @@ class ChunkedUploader { maxChunkSize: maxChunkSize, onUploadProgress: onUploadProgress, headersCallback: headersCallback, - ).upload(); + ).upload(stream); } class _Uploader { @@ -118,28 +119,42 @@ class _Uploader { _maxChunkSize = min(fileSize, maxChunkSize ?? fileSize); } - Future upload() async { + Future upload([bool stream = false]) async { try { Response? finalResponse; for (int i = 0; i < _chunksCount; i++) { final start = _getChunkStart(i); final end = _getChunkEnd(i); final chunkStream = _getChunkStream(); - final formData = FormData.fromMap({ - fileKey: MultipartFile(chunkStream, end - start, filename: fileName), - if (data != null) ...data! - }); - finalResponse = await dio.request( - path, - data: formData, - cancelToken: cancelToken, - options: Options( - method: method, - headers: _headersCallback(start, end, fileSize), - ), - onSendProgress: (current, total) => - _updateProgress(i, current, total), - ); + if (stream) { + finalResponse = await dio.request( + path, + data: chunkStream, + cancelToken: cancelToken, + options: Options( + method: method, + headers: _headersCallback(start, end, fileSize), + ), + onSendProgress: (current, total) => + _updateProgress(i, current, total), + ); + }else { + final formData = FormData.fromMap({ + fileKey: MultipartFile(chunkStream, end - start, filename: fileName), + if (data != null) ...data! + }); + finalResponse = await dio.request( + path, + data: formData, + cancelToken: cancelToken, + options: Options( + method: method, + headers: _headersCallback(start, end, fileSize), + ), + onSendProgress: (current, total) => + _updateProgress(i, current, total), + ); + } } return finalResponse; } catch (_) { From 256dc312ad5844e9d6093e7ea6e39fab511d9f64 Mon Sep 17 00:00:00 2001 From: Pedro Henrique Ferreira Figueiredo Date: Wed, 6 Mar 2024 14:30:52 -0300 Subject: [PATCH 04/10] chore: version bump --- pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pubspec.yaml b/pubspec.yaml index 8c82ed4..cb12b4e 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: chunked_uploader description: An easy-to-use package to upload files in chunks using Dio for mobile, desktop and web. -version: 1.1.0 +version: 1.2.0 homepage: https://github.com/Taskulu/chunked_uploader repository: https://github.com/Taskulu/chunked_uploader From 7d0b2c9dd088766c739c66699bac2fab8306689f Mon Sep 17 00:00:00 2001 From: Pedro Henrique Ferreira Figueiredo Date: Thu, 7 Mar 2024 16:58:18 -0300 Subject: [PATCH 05/10] chore: for FileSender --- lib/chunked_uploader.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/chunked_uploader.dart b/lib/chunked_uploader.dart index 8330e7e..7021ee7 100644 --- a/lib/chunked_uploader.dart +++ b/lib/chunked_uploader.dart @@ -124,7 +124,7 @@ class _Uploader { Response? finalResponse; for (int i = 0; i < _chunksCount; i++) { final start = _getChunkStart(i); - final end = _getChunkEnd(i); + final end = _getChunkEnd(i) - 1; //filesender final chunkStream = _getChunkStream(); if (stream) { finalResponse = await dio.request( From 4b4aa4885f84965ef2342d9a4e5b969ea2b96d62 Mon Sep 17 00:00:00 2001 From: Pedro Henrique Ferreira Figueiredo Date: Thu, 7 Mar 2024 17:04:36 -0300 Subject: [PATCH 06/10] Revert "chore: for FileSender" This reverts commit 7d0b2c9dd088766c739c66699bac2fab8306689f. --- lib/chunked_uploader.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/chunked_uploader.dart b/lib/chunked_uploader.dart index 7021ee7..8330e7e 100644 --- a/lib/chunked_uploader.dart +++ b/lib/chunked_uploader.dart @@ -124,7 +124,7 @@ class _Uploader { Response? finalResponse; for (int i = 0; i < _chunksCount; i++) { final start = _getChunkStart(i); - final end = _getChunkEnd(i) - 1; //filesender + final end = _getChunkEnd(i); final chunkStream = _getChunkStream(); if (stream) { finalResponse = await dio.request( From 4f29df96c688da1fc8c8d1add0f08cf7fe20324e Mon Sep 17 00:00:00 2001 From: Pedro Henrique Ferreira Figueiredo Date: Sat, 9 Mar 2024 09:38:22 -0300 Subject: [PATCH 07/10] feat: added streaming upload capability. Added queryParameters parameter passthrough --- lib/chunked_uploader.dart | 14 ++++++++++---- pubspec.yaml | 2 +- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/lib/chunked_uploader.dart b/lib/chunked_uploader.dart index 8330e7e..0ef5293 100644 --- a/lib/chunked_uploader.dart +++ b/lib/chunked_uploader.dart @@ -2,6 +2,7 @@ library chunked_uploader; import 'dart:async'; import 'dart:math'; + import 'package:async/async.dart'; import 'package:dio/dio.dart'; import 'package:universal_io/io.dart'; @@ -26,6 +27,8 @@ class ChunkedUploader { ChunkHeadersCallback? headersCallback, String method = 'POST', String fileKey = 'file', + bool stream = false, + Map? queryParameters, }) => _Uploader( _dio, @@ -40,7 +43,7 @@ class ChunkedUploader { maxChunkSize: maxChunkSize, onUploadProgress: onUploadProgress, headersCallback: headersCallback, - ).upload(); + ).upload(stream, queryParameters); /// Uploads the file using it's path Future uploadUsingFilePath({ @@ -55,6 +58,7 @@ class ChunkedUploader { String method = 'POST', String fileKey = 'file', bool stream = false, + Map? queryParameters, }) => _Uploader.fromFilePath( _dio, @@ -68,7 +72,7 @@ class ChunkedUploader { maxChunkSize: maxChunkSize, onUploadProgress: onUploadProgress, headersCallback: headersCallback, - ).upload(stream); + ).upload(stream, queryParameters); } class _Uploader { @@ -119,7 +123,7 @@ class _Uploader { _maxChunkSize = min(fileSize, maxChunkSize ?? fileSize); } - Future upload([bool stream = false]) async { + Future upload([bool stream = false, Map? queryParameters]) async { try { Response? finalResponse; for (int i = 0; i < _chunksCount; i++) { @@ -131,6 +135,7 @@ class _Uploader { path, data: chunkStream, cancelToken: cancelToken, + queryParameters: queryParameters, options: Options( method: method, headers: _headersCallback(start, end, fileSize), @@ -140,13 +145,14 @@ class _Uploader { ); }else { final formData = FormData.fromMap({ - fileKey: MultipartFile(chunkStream, end - start, filename: fileName), + fileKey: MultipartFile.fromStream(() => chunkStream, end - start, filename: fileName), if (data != null) ...data! }); finalResponse = await dio.request( path, data: formData, cancelToken: cancelToken, + queryParameters: queryParameters, options: Options( method: method, headers: _headersCallback(start, end, fileSize), diff --git a/pubspec.yaml b/pubspec.yaml index cb12b4e..7bfcce2 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: chunked_uploader description: An easy-to-use package to upload files in chunks using Dio for mobile, desktop and web. -version: 1.2.0 +version: 1.2.1 homepage: https://github.com/Taskulu/chunked_uploader repository: https://github.com/Taskulu/chunked_uploader From e943cda049005c85169620aeee08d254c98cbcf2 Mon Sep 17 00:00:00 2001 From: Pedro Henrique Ferreira Figueiredo Date: Mon, 11 Mar 2024 15:22:26 -0300 Subject: [PATCH 08/10] Revert "chore: version bump" This reverts commit 256dc312ad5844e9d6093e7ea6e39fab511d9f64. --- pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pubspec.yaml b/pubspec.yaml index 7bfcce2..8c82ed4 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: chunked_uploader description: An easy-to-use package to upload files in chunks using Dio for mobile, desktop and web. -version: 1.2.1 +version: 1.1.0 homepage: https://github.com/Taskulu/chunked_uploader repository: https://github.com/Taskulu/chunked_uploader From 7b0ff037613969290c45f217e5eb740915d9d95d Mon Sep 17 00:00:00 2001 From: Pedro Henrique Ferreira Figueiredo Date: Mon, 11 Mar 2024 15:29:50 -0300 Subject: [PATCH 09/10] fix: applying fixes request in PR PR: https://github.com/Taskulu/chunked_uploader/pull/11 --- lib/chunked_uploader.dart | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/lib/chunked_uploader.dart b/lib/chunked_uploader.dart index 0ef5293..45ee578 100644 --- a/lib/chunked_uploader.dart +++ b/lib/chunked_uploader.dart @@ -43,7 +43,9 @@ class ChunkedUploader { maxChunkSize: maxChunkSize, onUploadProgress: onUploadProgress, headersCallback: headersCallback, - ).upload(stream, queryParameters); + stream: stream, + queryParameters: queryParameters, + ).upload(); /// Uploads the file using it's path Future uploadUsingFilePath({ @@ -72,7 +74,9 @@ class ChunkedUploader { maxChunkSize: maxChunkSize, onUploadProgress: onUploadProgress, headersCallback: headersCallback, - ).upload(stream, queryParameters); + stream: stream, + queryParameters: queryParameters, + ).upload(); } class _Uploader { @@ -86,6 +90,8 @@ class _Uploader { final Function(double)? onUploadProgress; late int _maxChunkSize; final ChunkHeadersCallback _headersCallback; + final bool stream; + final Map? queryParameters; _Uploader( this.dio, { @@ -100,6 +106,8 @@ class _Uploader { this.onUploadProgress, ChunkHeadersCallback? headersCallback, int? maxChunkSize, + this.stream = false, + this.queryParameters, }) : streamReader = ChunkedStreamReader(fileDataStream), _maxChunkSize = min(fileSize, maxChunkSize ?? fileSize), _headersCallback = headersCallback ?? _defaultHeadersCallback; @@ -116,6 +124,8 @@ class _Uploader { this.onUploadProgress, ChunkHeadersCallback? headersCallback, int? maxChunkSize, + this.stream = false, + this.queryParameters, }) : _headersCallback = headersCallback ?? _defaultHeadersCallback { final file = File(filePath); streamReader = ChunkedStreamReader(file.openRead()); @@ -123,7 +133,7 @@ class _Uploader { _maxChunkSize = min(fileSize, maxChunkSize ?? fileSize); } - Future upload([bool stream = false, Map? queryParameters]) async { + Future upload() async { try { Response? finalResponse; for (int i = 0; i < _chunksCount; i++) { From 6a66966c68303ce27d8792a5bc1ea648ac4d9e95 Mon Sep 17 00:00:00 2001 From: Pedro Henrique Ferreira Figueiredo Date: Tue, 12 Mar 2024 10:56:06 -0300 Subject: [PATCH 10/10] vendor: pub upgrade --- pubspec.lock | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/pubspec.lock b/pubspec.lock index 7b70f5e..fef76e0 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -13,10 +13,10 @@ packages: dependency: transitive description: name: collection - sha256: f092b211a4319e98e5ff58223576de6c2803db36221657b46c82574721240687 + sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a url: "https://pub.dev" source: hosted - version: "1.17.2" + version: "1.18.0" dio: dependency: "direct main" description: @@ -37,18 +37,18 @@ packages: dependency: transitive description: name: meta - sha256: "3c74dbf8763d36539f114c799d8a2d87343b5067e9d796ca22b5eb8437090ee3" + sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" url: "https://pub.dev" source: hosted - version: "1.9.1" + version: "1.12.0" path: dependency: transitive description: name: path - sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" + sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" url: "https://pub.dev" source: hosted - version: "1.8.3" + version: "1.9.0" source_span: dependency: transitive description: @@ -90,4 +90,4 @@ packages: source: hosted version: "2.2.2" sdks: - dart: ">=2.18.0 <4.0.0" + dart: ">=3.0.0 <4.0.0"