tus_client_dart 2.2.1+3 tus_client_dart: ^2.2.1+3 copied to clipboard
A tus client for dart allowing resumable uploads using the tus protocol.
A tus client #
A tus client in pure dart. Resumable uploads using tus protocol Forked from tus_client
tus is a protocol based on HTTP for resumable file uploads. Resumable means that an upload can be interrupted at any moment and can be resumed without re-uploading the previous data again. An interruption may happen willingly, if the user wants to pause, or by accident in case of a network issue or server outage.
Usage #
import 'package:cross_file/cross_file.dart' show XFile;
// File to be uploaded
final file = XFile("/path/to/my/pic.jpg");
// Create a client
final client = TusClient(
Uri.parse("https://master.tus.io/files/"),
file,
store: TusMemoryStore(),
);
// Starts the upload
await client.upload(
onComplete: () {
print("Complete!");
// Prints the uploaded file URL
print(client.uploadUrl.toString());
},
onProgress: (double progress, Duration estimate, TusClient client) {
print("Progress: $progress, Estimated time: ${estimate.inSeconds}");
},
);
Using Persistent URL Store #
This is only supported on Flutter Android, iOS, desktop and web.
You need to add to your pubspec.yaml
:
import 'package:path_provider/path_provider.dart';
//creates temporal directory to store the upload progress
final tempDir = await getTemporaryDirectory();
final tempDirectory = Directory('${tempDir.path}/${gameId}_uploads');
if (!tempDirectory.existsSync()) {
tempDirectory.createSync(recursive: true);
}
// Create a client
final client = TusClient(
Uri.parse("https://example.com/tus"),
file,
store: TusFileStore(tempDirectory),
);
// Start upload
// Don't forget to delete the tempDirectory
await client.upload();
Adding Extra Headers #
final client = TusClient(
Uri.parse("https://master.tus.io/files/"),
file,
headers: {"Authorization": "..."},
);
Adding extra data #
final client = TusClient(
Uri.parse("https://master.tus.io/files/"),
file,
metadata: {"for-gallery": "..."},
);
Changing chunk size #
The file is uploaded in chunks. Default size is 512KB. This should be set considering speed of upload
vs device memory constraints
final client = TusClient(
Uri.parse("https://master.tus.io/files/"),
file,
maxChunkSize: 10 * 1024 * 1024, // chunk is 10MB
);
Pausing upload #
Pausing upload can be done after current uploading in chunk is completed.
final client = TusClient(
Uri.parse("https://master.tus.io/files/"),
file
);
// Pause after 5 seconds
Future.delayed(Duration(seconds: 5)).then((_) =>client.pause());
// Starts the upload
await client.upload(
onComplete: () {
print("Complete!");
},
onProgress: (double progress, Duration estimate, TusClient client) {
print("Progress: $progress, Estimated time: ${estimate.inSeconds}");
},
);
Example #
For an example of usage in a Flutter app (using file picker) see: /example