phacility/phabricator · error · Exception
Unable to upload file: this server is not configured with an
Error message
Unable to upload file: this server is not configured with any storage engine which can store large files.
What it means
PhabricatorFileUploadSource::getChunkEngine() calls PhabricatorFileStorageEngine::loadWritableChunkEngines(); an empty result means no storage engine that supports chunked storage is both configured and writable on this server. Chunking is required for uploads above the engine threshold, so large uploads are impossible until at least one chunk-capable engine (local disk, S3, MySQL blob engine as configured) is available.
Source
Thrown at src/applications/files/uploadsource/PhabricatorFileUploadSource.php:284
}
$mime_type = $this->getMimeType();
if ($mime_type !== null) {
$parameters['mime-type'] = $mime_type;
}
$author_phid = $this->getAuthorPHID();
if ($author_phid !== null) {
$parameters['authorPHID'] = $author_phid;
}
return $parameters;
}
private function getChunkEngine() {
$chunk_engines = PhabricatorFileStorageEngine::loadWritableChunkEngines();
if (!$chunk_engines) {
throw new Exception(
pht(
'Unable to upload file: this server is not configured with any '.
'storage engine which can store large files.'));
}
return head($chunk_engines);
}
private function setTotalBytesWritten($total_bytes_written) {
$this->totalBytesWritten = $total_bytes_written;
return $this;
}
private function getTotalBytesWritten() {
return $this->totalBytesWritten;
}
}View on GitHub (pinned to 5720a38cfe)
Solutions
- Configure a storage engine, simplest is local disk: ./bin/config set storage.local-disk.path /var/phabricator/files (create the directory first).
- Ensure the PHP/daemon user can write there: mkdir -p /var/phabricator/files && chown www-data /var/phabricator/files (or grant group write).
- Re-test with a large upload; if using S3/other engines, verify their config keys and credentials so the engine passes the writable check.
Example fix
# before: no chunk engine configured, large upload fails sudo mkdir -p /var/phabricator/files sudo chown www-data:www-data /var/phabricator/files ./bin/config set storage.local-disk.path /var/phabricator/files # after: retry the large upload
Defensive patterns
Strategy: validation
Validate before calling
if (!PhabricatorFileStorageEngine::loadWritableChunkEngines()) {
// large uploads will fail; require configuration first
throw new Exception('Configure a writable storage engine before accepting large uploads.');
} Try / catch
try {
$file = $source->uploadFile();
} catch (Exception $ex) {
if (preg_match('/storage engine which can store large files/', $ex->getMessage())) {
// surface a setup/ops error, not a client error
throw new AphrontRecoverableException('File storage is not configured.');
}
throw $ex;
} Prevention
- As part of install, set storage.local-disk.path (or S3 config) and create the directory with correct ownership.
- Include a chunk-engine check in health/monitoring so drift is detected before users hit it.
- Re-verify storage configuration and directory permissions after storage migrations or server moves.
When it happens
Trigger: Uploading a file large enough to trigger chunked upload (bigger than the single-write threshold) on an instance with no storage engine configured, or one whose engine fails its writability check — e.g. storage.local-disk.path never set, points at a missing directory, or the directory is not writable by the web/daemon user.
Common situations: Fresh Phabricator installs where no storage.local-disk.path (or S3 config) was provided; ops moving storage directories without updating permissions; S3 credentials/bucket misconfigured so the engine reports not writable.
Related errors
- Specify an absolute TTL or a relative TTL, but not both.
- Absolute TTL must be in the present or future, but TTL "%s"
- Relative TTL must be zero or more seconds, but "%s" is negat
- Relative TTL must not be more than "%s" seconds, but TTL "%s
- No configured mailers support outbound messages of type "%s"
AI-assisted analysis of phacility/phabricator@5720a38cfe (2026-08-21).
Data as JSON: /api/errors/d5c170cd8f8eee7f.
Report an issue: GitHub.