duplicati/duplicati · error · FolderMissingException

Folder not found: {m_path}

Error message

Folder not found: {m_path}

What it means

Thrown in Filejump.PutAsync when the configured destination folder path m_path is non-empty but GetTargetPathIdAsync could not resolve it to a folder id. It is a FolderMissingException, which Duplicati treats as a retry-stoppable, user-correctable backend error (the framework can prompt to re-create the folder). It fires before any upload attempt, so no data is transferred.

Source

Thrown at Duplicati/Library/Backend/Filejump/Filejump.cs:248

            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);

            return m_client = client;
        }

        ///<inheritdoc/>
        public async Task PutAsync(string remotename, string filename, CancellationToken token)
        {
            using var fs = File.OpenRead(filename);
            await PutAsync(remotename, fs, token);
        }

        ///<inheritdoc/>
        public async Task PutAsync(string remotename, Stream stream, CancellationToken token)
        {
            var client = await GetClient(token);
            var folderId = await GetTargetPathIdAsync(m_path, token);
            if (folderId == null && !string.IsNullOrWhiteSpace(m_path))
                throw new FolderMissingException($"Folder not found: {m_path}");

            // Filejump does not support overwrite, so we need to delete the previous version if it exists
            var cache = await GetCacheTable(token);
            cache.TryGetValue(remotename, out var _);
            await DeleteAsync(remotename, token);

            var content = new MultipartFormDataContent();
            using var timeoutStream = stream.ObserveReadTimeout(m_timeoutOptions.ReadWriteTimeout);
            var fileContent = new StreamContent(timeoutStream);
            content.Add(fileContent, "file", remotename);
            if (folderId.HasValue)
                content.Add(new StringContent(folderId.Value.ToString()), "parentId");

            using var request = new HttpRequestMessage(HttpMethod.Post, "uploads") { Content = content };
            request.Headers.Add("Accept", "application/json");

            using var response = await client.SendAsync(request, token);
            await EnsureSuccessStatusCode(response);

View on GitHub (pinned to 3f348be3e3)

Solutions

  1. Open the Filejump web UI and confirm the configured destination folder path exists exactly as typed in the backup destination URL.
  2. Re-run the destination test/connection wizard so Duplicati re-validates the path.
  3. If the folder was deleted, recreate it at the same path or update the backup destination to point at an existing folder.
  4. Ensure the same Filejump account is used; if credentials changed, re-enter them so the path resolves against the right workspace.
Defensive patterns

Strategy: validation

Validate before calling

// Pre-flight: resolve the folder before the first PutAsync
var folderId = await GetTargetPathIdAsync(m_path, token);
if (folderId == null && !string.IsNullOrWhiteSpace(m_path))
    throw new FolderMissingException($"Folder not found: {m_path}");

Try / catch

try { await PutAsync(remotename, filename, token); }
catch (FolderMissingException) { /* re-run destination test, recreate folder, then retry */ }

Prevention

When it happens

Trigger: PutAsync(stream) is called, GetClient succeeds, GetTargetPathIdAsync(m_path) returns null, and m_path is not null/whitespace. This happens when the path does not exist on the Filejump side and the listing/traversal in GetTargetPathIdAsync found no matching folder.

Common situations: The destination folder was deleted or renamed in the Filejump web UI after the backup destination was configured. The configured path has a typo or a leading/trailing slash mismatch. A different Filejump account is now logged in, so the previously existing folder is gone. The folder lives under a parent that no longer exists, so traversal stops early.

Related errors


AI-assisted analysis of duplicati/duplicati@3f348be3e3 (2026-08-13). Data as JSON: /api/errors/34c705ffa8d66784. Report an issue: GitHub.