Flutter UpChunk is a simple port of the JS library https://github.com/muxinc/upchunk done by MUX, Inc.
Add the package to the dependencies
section in pubspec.yaml
:
flutter_upchunk: ^1.3.1
(or latest release)
Add the following import to the .dart
file that will use UpChunk
import 'package:flutter_upchunk/flutter_upchunk.dart';
Future<String> _getUploadUrl() {
String uploadUrl;
// Perform call either to your API or directly to MUX to retrieve the upload URL
// ...
//
return uploadUrl;
}
// Chunk upload
var uploadOptions = UpChunkOptions()
..endPointResolver = _getUploadUrl()
..file = File(_filePath)
..onProgress = (progress) {
print('Upload progress: ${progress.ceil()}%');
}
..onError = (String message, int chunk, int attempts) {
print('UpChunk error 💥 🙀:');
print(' - Message: $message');
print(' - Chunk: $chunk');
print(' - Attempts: $attempts');
}
..onSuccess = () {
print('Upload complete! 👋');
};
var upChunkUpload = UpChunk.createUpload(uploadOptions);
Although the API is a port of the original JS library, some options and properties differ slightly.
Returns an instance of UpChunk
and begins uploading the specified File
.
-
endPoint
type:string
(required ifendPointResolver
isnull
)URL to upload the file to.
-
endPointResolver
type:Future<String>
(required ifendPoint
isnull
)A
Future
that returns the URL as aString
. -
file
type:File
(required)The file you'd like to upload.
-
headers
type:Map<String, String>
A
Map
with any headers you'd like included with thePUT
request for each chunk. -
chunkSize
type:integer
, default:5120
The size in kb of the chunks to split the file into, with the exception of the final chunk which may be smaller. This parameter should be in multiples of 64.
-
attempts
type:integer
, default:5
The number of times to retry any given chunk.
-
delayBeforeRetry
type:integer
, default:1
The time in seconds to wait before attempting to upload a chunk again.
-
onAttempt
{ chunkNumber: Integer, chunkSize: Integer }
Fired immediately before a chunk upload is attempted.
chunkNumber
is the number of the current chunk being attempted, andchunkSize
is the size (in bytes) of that chunk. -
onAttemptFailure
{ message: String, chunkNumber: Integer, attemptsLeft: Integer }
Fired when an attempt to upload a chunk fails.
-
onError
{ message: String, chunk: Integer, attempts: Integer }
Fired when a chunk has reached the max number of retries or the response code is fatal and implies that retries should not be attempted.
-
onOffline
Fired when the client has gone offline.
-
onOnline
Fired when the client has gone online.
-
onProgress
progress double [0..100]
Fired continuously with incremental upload progress. This returns the current percentage of the file that's been uploaded.
-
onSuccess
Fired when the upload is finished successfully.
-
pause()
Pauses an upload after the current in-flight chunk is finished uploading.
-
resume()
Resumes an upload that was previously paused.
-
restart()
Restarts the upload from chunk
0
, use only if and afteronError
was fired. -
stop()
Cancels the upload abruptly.
restart()
can be used to start the upload from chunk0
.
Original code by MUX, Inc. and ported to Dart 🎯 with ❤ by a Flutter developer.