conductor-oss/conductor · error · IllegalArgumentException
File has not been uploaded: {}
Error message
File has not been uploaded: {} What it means
Thrown by FileStorageServiceImpl.downloadContent when the file's upload status is not UPLOADED. Content cannot be streamed for a file that was never confirmed uploaded. Raised as IllegalArgumentException (HTTP 400). This is the streaming equivalent of error 472.
Source
Thrown at core/src/main/java/org/conductoross/conductor/core/storage/FileStorageServiceImpl.java:154
return response;
}
@Override
public void uploadContent(String workflowId, String fileId, InputStream content) {
FileModel model = getOwnedFile(workflowId, fileId);
if (model.getUploadStatus() != FileUploadStatus.UPLOADING) {
throw new ConflictException("File is not accepting content uploads: " + fileId);
}
fileStorage.writeContent(model.getStoragePath(), content);
}
@Override
public FileContent downloadContent(String workflowId, String fileId) {
// Family-accessible, like getDownloadUrl: for the Conductor backend that URL is this
// endpoint, so requiring the exact owner here would 403 a URL we just handed out.
FileModel model = getFamilyAccessibleFile(workflowId, fileId);
if (model.getUploadStatus() != FileUploadStatus.UPLOADED) {
throw new IllegalArgumentException("File has not been uploaded: " + fileId);
}
return new FileContent(
fileStorage.readContent(model.getStoragePath()),
model.getContentType(),
model.getStorageContentSize());
}
@Override
public FileHandle getFileMetadata(String workflowId, String fileId) {
FileModel model = getFamilyAccessibleFile(workflowId, fileId);
return FileModelConverter.toFileHandle(model);
}
@Override
public MultipartInitResponse initiateMultipartUpload(String workflowId, String fileId) {
FileModel model = getOwnedFile(workflowId, fileId);
String uploadId = fileStorage.initiateMultipartUpload(model.getStoragePath());
View on GitHub (pinned to cf7c3e4a8a)
Solutions
- Confirm the upload (confirmUpload) before calling downloadContent.
- Check getFileMetadata uploadStatus first and only download when UPLOADED.
- Redo the upload flow if it never completed.
Example fix
// before FileContent c = fileStorageService.downloadContent(wfId, fileId); // throws // after fileStorageService.confirmUpload(wfId, fileId); FileContent c = fileStorageService.downloadContent(wfId, fileId);
Defensive patterns
Strategy: validation
Validate before calling
FileHandle meta = fileStorageService.getFileMetadata(wfId, fileId);
if (meta.getUploadStatus() == FileUploadStatus.UPLOADED) {
fileStorageService.downloadContent(wfId, fileId);
} Try / catch
try {
FileContent c = fileStorageService.downloadContent(wfId, fileId);
} catch (IllegalArgumentException e) {
// file not uploaded yet
} Prevention
- Confirm upload before streaming content
- Check uploadStatus before download
When it happens
Trigger: Calling downloadContent before confirmUpload; upload was started but never confirmed; download attempted on an UPLOADING record.
Common situations: Client requesting streamed content mid-upload; skipped the confirm step; prior upload/confirm failed.
Related errors
- File not yet uploaded: {}, status={}
- File is not accepting content uploads: {}
- 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/b31c7eee50112b16.
Report an issue: GitHub.