conductor-oss/conductor · error · FileStorageException
Configured file storage does not support content streaming
Error message
Configured file storage does not support content streaming
What it means
Default implementation of FileStorage.writeContent throws FileStorageException when the configured backend does not support server-side content streaming. FileStorageServiceImpl.uploadContent calls this to stream bytes directly to the backend; backends that only issue presigned/client-side URLs keep the default and therefore cannot accept streamed writes. FileStorageException extends NonTransientException, so it is not retried.
Source
Thrown at core/src/main/java/org/conductoross/conductor/core/storage/FileStorage.java:54
*/
String generateUploadUrl(String storagePath, Duration expiration);
/** Returns a fresh presigned download URL (or backend-equivalent) for {@code storagePath}. */
String generateDownloadUrl(String storagePath, Duration expiration);
/**
* Reads existence, content hash, and actual byte size from the storage backend in a single
* call. Returns {@code null} if the object is not present. {@code contentHash} is {@code null}
* for backends that do not expose one.
*/
StorageFileInfo getStorageFileInfo(String storagePath);
/**
* Streams content to a backend-managed storage path without buffering it in the service layer.
* Backends that only support client-side signed URLs can retain the default implementation.
*/
default void writeContent(String storagePath, InputStream content) {
throw new FileStorageException(
"Configured file storage does not support content streaming");
}
/**
* Opens content for streaming from a backend-managed storage path. The caller closes the
* returned stream. Backends that only support client-side signed URLs can retain the default
* implementation.
*/
default InputStream readContent(String storagePath) {
throw new FileStorageException(
"Configured file storage does not support content streaming");
}
/** Starts a backend-native multipart upload and returns its backend-specific upload ID. */
String initiateMultipartUpload(String storagePath);
/**
* Returns a signed URL for one multipart part. Provider-specific query parameters may be addedView on GitHub (pinned to cf7c3e4a8a)
Solutions
- Use the presigned URL flow: createFile returns an upload URL; PUT content directly to that URL, then confirmUpload.
- If server-side streaming is required, provide a FileStorage implementation that overrides writeContent.
- Switch to a backend that supports content streaming (e.g. one with a managed upload).
Example fix
// before - streaming to a presigned-URL-only backend fileStorageService.uploadContent(wfId, fileId, inputStream); // throws // after - use the presigned URL returned by createFile FileUploadResponse resp = fileStorageService.createFile(req); http.put(resp.getUploadUrl(), fileBytes); fileStorageService.confirmUpload(wfId, resp.getFileId());
Defensive patterns
Strategy: validation
Validate before calling
// Check capability before streaming boolean canStream = /* your backend overrides writeContent */;
Try / catch
try {
fileStorageService.uploadContent(wfId, fileId, in);
} catch (FileStorageException e) {
// backend is presigned-URL-only; use the URL flow instead
} Prevention
- Default to the presigned URL upload flow for portability
- Override writeContent in custom backends that must accept streamed writes
When it happens
Trigger: Calling the content upload endpoint (uploadContent / POST content) when the active FileStorage implementation did not override writeContent. I.e., the backend is a presigned-URL-only provider.
Common situations: Using the Conductor-managed local/file backend or a custom BYO storage that only implements generateUploadUrl; client code path that streams content directly to the server instead of using the presigned upload URL flow.
Related errors
- File not found on storage backend: {}
- File not found on storage after multipart complete: {}
- conductor.file-storage.conductor.signing.keys is required wh
- Each conductor.file-storage.conductor.signing.keys entry req
- conductor.file-storage.conductor.signing.keys contains dupli
AI-assisted analysis of conductor-oss/conductor@cf7c3e4a8a (2026-08-14).
Data as JSON: /api/errors/c14ccbda90a00690.
Report an issue: GitHub.