@@ -147,7 +147,7 @@ public function uploadMediaFile(int $documentId, string $newFileName, $newFileRe
147147 throw new NotPermittedException ('No write permissions ' );
148148 }
149149 $ saveDir = $ this ->getAttachmentDirectoryForFile ($ textFile , true );
150- $ fileName = ( string ) time () . ' - ' . $ newFileName ;
150+ $ fileName = $ this -> getUniqueFileName ( $ saveDir , $ newFileName) ;
151151 $ savedFile = $ saveDir ->newFile ($ fileName , $ newFileResource );
152152 return [
153153 'name ' => $ fileName ,
@@ -174,7 +174,7 @@ public function uploadMediaFilePublic(?int $documentId, string $newFileName, $ne
174174 }
175175 $ textFile = $ this ->getTextFilePublic ($ documentId , $ shareToken );
176176 $ saveDir = $ this ->getAttachmentDirectoryForFile ($ textFile , true );
177- $ fileName = ( string ) time () . ' - ' . $ newFileName ;
177+ $ fileName = $ this -> getUniqueFileName ( $ saveDir , $ newFileName) ;
178178 $ savedFile = $ saveDir ->newFile ($ fileName , $ newFileResource );
179179 return [
180180 'name ' => $ fileName ,
@@ -216,7 +216,7 @@ public function insertMediaFile(int $documentId, string $mediaFilePath, string $
216216 private function copyMediaFile (File $ mediaFile , Folder $ saveDir , File $ textFile ): array {
217217 $ mimeType = $ mediaFile ->getMimeType ();
218218 if (in_array ($ mimeType , MediaController::IMAGE_MIME_TYPES , true )) {
219- $ fileName = ( string ) time () . ' - ' . $ mediaFile ->getName ();
219+ $ fileName = $ this -> getUniqueFileName ( $ saveDir , $ mediaFile ->getName () );
220220 $ targetPath = $ saveDir ->getPath () . '/ ' . $ fileName ;
221221 $ targetFile = $ mediaFile ->copy ($ targetPath );
222222 // get file type and name
@@ -232,6 +232,30 @@ private function copyMediaFile(File $mediaFile, Folder $saveDir, File $textFile)
232232 ];
233233 }
234234
235+ /**
236+ * Get unique file name in a directory. Add '(n)' suffix.
237+ * @param Folder $dir
238+ * @param string $fileName
239+ * @return string
240+ */
241+ public static function getUniqueFileName (Folder $ dir , string $ fileName ): string {
242+ $ extension = pathinfo ($ fileName , PATHINFO_EXTENSION );
243+ $ counter = 1 ;
244+ $ uniqueFileName = $ fileName ;
245+ if ($ extension !== '' ) {
246+ while ($ dir ->nodeExists ($ uniqueFileName )) {
247+ $ counter ++;
248+ $ uniqueFileName = preg_replace ('/\. ' . $ extension . '$/ ' , ' ( ' . $ counter . '). ' . $ extension , $ fileName );
249+ }
250+ } else {
251+ while ($ dir ->nodeExists ($ uniqueFileName )) {
252+ $ counter ++;
253+ $ uniqueFileName = preg_replace ('/$/ ' , ' ( ' . $ counter . ') ' , $ fileName );
254+ }
255+ }
256+ return $ uniqueFileName ;
257+ }
258+
235259 /**
236260 * Check if the shared access has write permissions
237261 *
0 commit comments