Search packages, repositories and app categories

Package detailsv1.0.2

tus_client

A tus client for dart allowing resumable uploads using the tus protocol.

AndroidiOSWebmacOSWindowsLinux
30-day downloads
145
Likes
25
Pub points
140

Install package

flutter pub add tus_client

Package Overview

Package selection guidance compiled from public package information, community data, and project usage.

The tus_client package is a Dart implementation of the tus protocol, enabling resumable file uploads across various platforms. It allows users to upload large files reliably by breaking them into chunks and resuming interrupted transfers. The client supports all major platforms including Android, iOS, Web, macOS, Windows, and Linux. Built for robustness and efficiency, it handles network interruptions gracefully and ensures data integrity during uploads. Ideal for applications requiring secure, scalable file transfer capabilities.

Use cases

  • Large file uploads
  • Offline-first file transfer
  • Cloud storage integration
  • Progress tracking during uploads
  • Resume interrupted uploads

Key features

  • Resumable uploads
  • Cross-platform support
  • Chunked file transfer
  • Upload progress monitoring
  • Automatic retry on failure

Suitable for

  • File-heavy applications
  • Mobile and web apps with upload needs
  • Applications requiring reliable data transfer
  • Developers using the tus protocol
  • Backend services integrating with tus clients

Considerations

  • Requires a tus-compatible server
  • Limited to file upload use cases
  • May need additional configuration for custom headers
  • Not suitable for streaming or real-time data
  • Dependent on stable internet connection for optimal performance

Original README

Original README snapshot from the linked source repository. Visit the repository for the latest content.

A tus client

Pub Version Build Status codecov


A tus client in pure dart. Resumable uploads using tus protocol

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: (progress) {
        print("Progress: $progress");
    },
);
Using Persistent URL Store

This is only supported on Flutter Android, iOS, desktop and web. You need to add to your pubspec.yaml:

dependencies:
  tus_client: ^1.0.2
  tus_client_file_store: ^0.0.3
import 'package:path_provider/path_provider.dart';
import 'package:tus_client_file_store/tus_client_file_store.dart' show TusFileStore;
import 'package:path/path.dart' as p;

// Directory the current uploads will be saved in
final tempDir = (await getTemporaryDirectory()).path;
final tempDirectory = Directory(p.join(tempDir, "tus-uploads"));

// Create a client
final client = TusClient(
    Uri.parse("https://example.com/tus"),
    file,
    store: TusFileStore(tempDirectory),
);

// Start upload
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: (progress) {
        print("Progress: $progress");
    },
);

Example

For an example of usage in a Flutter app (using file picker) see: /example

Maintainers

Categories

Dependencies

Dependency list 3 items

Source repository

Projects using this package

No data available yet.