Comment éviter les fichiers en double dans les sous-dossiers dans Laravel
P粉770375450
P粉770375450 2023-07-31 16:12:39
0
1
451
<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粉770375450
P粉770375450

répondre à tous(1)
P粉154228483

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.


Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!