{"record":{"id":"d9c2696f50493dd4","repo":"octobercms/october","slug":"backend-lang-media-folder-or-file-exist","errorCode":null,"errorMessage":"backend::lang.media.folder_or_file_exist","messagePattern":"backend::lang\\.media\\.folder_or_file_exist","errorType":"exception","errorClass":"ApplicationException","httpStatus":null,"severity":"error","filePath":"modules/media/widgets/MediaManager.php","lineNumber":509,"sourceCode":"\n        $name = trim(Input::get('name'));\n        if (!strlen($name)) {\n            throw new ApplicationException(Lang::get('cms::lang.asset.name_cant_be_empty'));\n        }\n\n        if (!$this->validateFileName($name)) {\n            throw new ApplicationException(Lang::get('cms::lang.asset.invalid_name'));\n        }\n\n        $path = Input::get('path');\n        $path = MediaLibrary::validatePath($path);\n\n        $newFolderPath = $path.'/'.$name;\n\n        $library = MediaLibrary::instance();\n\n        if ($library->folderExists($newFolderPath)) {\n            throw new ApplicationException(Lang::get('backend::lang.media.folder_or_file_exist'));\n        }\n\n        /*\n         * Create the new folder\n         */\n        if (!$library->makeFolder($newFolderPath)) {\n            throw new ApplicationException(Lang::get('backend::lang.media.error_creating_folder'));\n        }\n\n        /**\n         * @event media.folder.create\n         * Called after a folder is created\n         *\n         * Example usage:\n         *\n         *     Event::listen('media.folder.create', function ((\\Media\\Widgets\\MediaManager) $mediaWidget, (string) $newFolderPath) {\n         *         \\Log::info($newFolderPath . \" was created\");\n         *     });","sourceCodeStart":491,"sourceCodeEnd":527,"githubUrl":"https://github.com/octobercms/october/blob/b608633a7e8922487d91a8161499020121c3b3bf/modules/media/widgets/MediaManager.php#L491-L527","documentation":"Thrown by onCreateFolder after MediaLibrary::instance()->folderExists($newFolderPath) returns true. The handler builds the target as validatePath(path) . '/' . name and refuses to create a folder that already exists, so the library never overwrites or merges directories.","triggerScenarios":"AJAX 'onCreateFolder' where path.'/'.name already exists in the media library storage (e.g. creating 'photos' inside '/' when storage/app/media/photos exists), or two users/steps creating the same folder concurrently.","commonSituations":"Stale folder list in the browser (folder was created in another tab or by another user); leftover folder on disk after a record was deleted; race between a form submit and a duplicate submit (double click).","solutions":["Refresh the media list and create the folder under a different name","Guard against double submission (disable the button until the AJAX completes)","If scripting, call MediaLibrary::instance()->folderExists($path) (or listAllDirectories) before invoking the handler"],"exampleFix":"// before\n$.request('onCreateFolder', { data: { path, name } });\n\n// after\nconst exists = folders.some(f => f === (path === '/' ? '' : path) + '/' + name);\nif (!exists) {\n    $.request('onCreateFolder', { data: { path, name } });\n}","handlingStrategy":"validation","validationCode":"// Client: check against the already-loaded folder list before requesting\nconst target = (path === '/' ? '' : path) + '/' + name;\nif (knownFolders.some(f => f === target)) { showToast('Folder already exists'); return; }","typeGuard":"function folderIsUnique(name, path, knownFolders) {\n  const target = (path === '/' ? '' : path) + '/' + name;\n  return !knownFolders.includes(target);\n}","tryCatchPattern":"$.request('onCreateFolder', { data }).fail(function (xhr) {\n    if (/exist/i.test(String(xhr.responseJSON?.X_OCTOBER_ERROR_MESSAGE?.[0]))) refreshMediaList(); // stale list\n    else showFlash('Create folder failed');\n});","preventionTips":["Refresh the folder list when the popup opens","Debounce/disable the submit button to prevent double creates","Tolerate the exists-error in automation by treating it as success"],"tags":["media-manager","folder","duplicate","conflict","backend-ajax"],"backgroundTag":"duplicate-resource-conflict","analyzedSha":"b608633a7e8922487d91a8161499020121c3b3bf","analyzedAt":"2026-08-21T04:24:57.515Z","schemaVersion":2},"datasetVersion":"2026-08-21T11:28:35.574Z"}