Skip to main content

Crate nextcloud_uploads

Crate nextcloud_uploads 

Source
Expand description

Nextcloud WebDAV Chunked Upload v2 API client.

Provides UploadClient for uploading large files to Nextcloud using the WebDAV Chunked Upload v2 protocol, and UploadSession for tracking active upload progress and calculating chunk ranges.

§Protocol Overview

  1. Initialize Upload Session:
    • Sends MKCOL /remote.php/dav/uploads/{user}/{upload_id}
    • Required header: Destination: {destination_webdav_url_or_path}
  2. Upload Chunks:
    • Sends PUT /remote.php/dav/uploads/{user}/{upload_id}/{chunk_number} (e.g. 00001, 00002)
    • Required headers: Destination: {destination_path}, OC-Total-Length: {total_file_size}
    • Request body: chunk bytes (recommended 5 MiB to 5 GiB, last chunk may be smaller)
  3. Assemble File:
    • Sends MOVE /remote.php/dav/uploads/{user}/{upload_id}/.file
    • Required headers: Destination: {destination_path}, OC-Total-Length: {total_file_size}
    • Optional header: X-OC-Mtime: {unix_timestamp}
  4. Abort Upload:
    • Sends DELETE /remote.php/dav/uploads/{user}/{upload_id}/ (cancels upload and cleans up temporary chunks)

§Example

use nextcloud_uploads::{UploadClient, UploadSession, DEFAULT_CHUNK_SIZE};
let client = UploadClient::new(transport, auth);

// 1. Start the upload session
let total_size = 25 * 1024 * 1024; // 25 MiB
let session = client.start("alice", "Documents/archive.zip", total_size).await?;

// 2. Calculate chunk boundaries and upload each chunk
for boundary in session.chunk_boundaries(DEFAULT_CHUNK_SIZE).unwrap() {
    let chunk_bytes = vec![0u8; boundary.len() as usize];
    client.upload_chunk(&session, boundary.index, chunk_bytes).await?;
}

// 3. Finish assembly
client.finish(&session, None).await?;

Re-exports§

pub use path::abort_path;
pub use path::assembly_path;
pub use path::chunk_path;
pub use path::upload_collection_path;

Modules§

path
URL and path helpers for Nextcloud WebDAV Chunked Upload v2.

Structs§

ChunkBoundary
Describes the byte boundaries of an individual upload chunk.
UploadClient
Client for Nextcloud’s WebDAV Chunked Upload v2 protocol.
UploadSession
Active chunked upload session state.

Constants§

DEFAULT_CHUNK_SIZE
Default chunk size used for uploads (10 MiB).
DESTINATION_HEADER
Header carrying a WebDAV destination URI (RFC 4918 §10.3).
MAX_CHUNK_SIZE
Maximum chunk size recommended by Nextcloud (5 GiB).
MIN_CHUNK_SIZE
Minimum chunk size recommended by Nextcloud (5 MiB).
MTIME_HEADER
Header conveying target modification time (in unix seconds) during chunk assembly.
TOTAL_LENGTH_HEADER
Header conveying total file size during chunked upload and assembly.