Maison  >  Questions et réponses  >  le corps du texte

Comment éviter les fichiers en double dans les sous-dossiers dans Laravel

<p>J'ai créé une vue supplémentaire qui peut télécharger plusieurs fichiers en même temps. Lorsqu'un fichier est téléchargé, le chemin du fichier sera affiché dans un format similaire à « Drawings/PartNumber/Type/filename.extension ». Je souhaite vérifier dans le dossier « Dessins » pour m'assurer qu'aucun fichier n'a la même extension. Comment y parvenir ? </p> <ol> <li>Drawings/PartNumber1/Type1/filename1.pdf</li> <li>Drawings/PartNumber2/Type2/filename1.pdf</li> <li>Drawings/PartNumber1/Type3/filename1.pdf</li> <li>Drawings/PartNumber1/filename1.pdf</li> <li>Drawings/filename1.pdf ne sera jamais accepté.</li> </ol> <p>Ma fonction est : </p> <pre class="brush:php;toolbar:false;">fonction publique AddNewPart(Request $request) { if (array_key_exists('DrawingFile',$data)) { foreach($request->file('DrawingFile') as $key=>$file) { si ($data['fileupload_ID'][$key]==NULL) { $extension=$file->getClientOriginalExtension(); $file_name2 = $file->getClientOriginalName(); $filepath='Drawings/'.$data['PartNumber'].'/'.$data['Type'][$key].'/'.$file_name2; $file->move(public_path('Drawings/'.$data['PartNumber'].'/'.$data['Type'][$key].'/'), $file_name2); $DocumentData2=array('Type'=>$data['Type'][$key],'fcontent'=>$file_name2,'condpartno'=>$data['PartNumber'],'fname'= >$chemin du fichier, 'DrawingNo'=>$data['DrawingNo'][$key],'DocumentType'=>$data['Type'][$key]); DB::table('fileupload')->insert($DocumentData2); } } } }</pré> <p><br /></p>
P粉770375450P粉770375450421 Il y a quelques jours452

répondre à tous(1)je répondrai

  • P粉154228483

    P粉1542284832023-08-01 00:11:46

    Si vous souhaitez empêcher le même fichier d'être téléchargé plusieurs fois dans différents sous-répertoires, vous pouvez profiter du système de fichiers de Laravel et vérifier si le fichier existe avant d'essayer de le télécharger.

    La façade Fichier fournit une méthode existe que vous pouvez utiliser pour vérifier si un fichier dans un chemin donné existe.

    Voici comment vous pouvez le modifier :


    use Illuminate\Support\Facades\File;
    
    public function AddNewPart(Request $request)
    {
        if (array_key_exists('DrawingFile',$request->all())) {
            foreach($request->file('DrawingFile') as $key=>$file)
            {
                if ($request->fileupload_ID[$key] == NULL) {
                    $extension = $file->getClientOriginalExtension();
                    $file_name2 = $file->getClientOriginalName();
                    $filepath = 'Drawings/'.$request->PartNumber.'/'.$request->Type[$key].'/'.$file_name2;
    
                    // Check if the file already exists before moving it
                    if (!File::exists(public_path($filepath))) {
                        $file->move(public_path('Drawings/'.$request->PartNumber.'/'.$request->Type[$key].'/'), $file_name2);
    
                        $DocumentData2 = array(
                            'Type'=>$request->Type[$key],
                            'fcontent'=>$file_name2,
                            'condpartno'=>$request->PartNumber,
                            'fname'=>$filepath,
                            'DrawingNo'=>$request->DrawingNo[$key],
                            'DocumentType'=>$request->Type[$key]
                        );
    
                        DB::table('fileupload')->insert($DocumentData2);
                    } else {
                        // You might want to return some feedback to the user here
                        return response()->json([
                            'error' => 'File already exists.'
                        ], 400);
                    }
                }
            }
        }
    }
    

    Le code ci-dessus ne sera téléchargé que si le fichier n'existe pas dans le répertoire spécifié. Si le fichier existe déjà, une réponse d'erreur avec le message « Le fichier existe déjà » est renvoyée.

    Une chose à noter est le comportement de la méthode getClientOriginalName(). Il renverra le nom d'origine du fichier de la machine client, ce qui peut causer des problèmes si les fichiers de différents clients portent le même nom. Si cela pose un problème, envisagez de mettre en œuvre une convention de dénomination unique lors du téléchargement.

    N'oubliez pas non plus d'importer les classes nécessaires en haut du fichier et de prendre soin de gérer tout problème potentiel tel que des champs obligatoires manquants ou des échecs d'insertion dans la base de données.


    répondre
    0
  • Annulerrépondre