How to prevent duplicate files in subfolders in Laravel
P粉770375450
P粉770375450 2023-07-31 16:12:39
0
1
449
<p>I created an add view that can upload multiple files at the same time. When a file is uploaded, the file path will be displayed in a format similar to 'Drawings/PartNumber/Type/filename.extension'. I want to check in the 'Drawings' folder to make sure no file has the same extension. How to achieve this? </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 never will be accepted.</li> </ol> <p>My function is: </p> <pre class="brush:php;toolbar:false;">public function AddNewPart(Request $request) { if (array_key_exists('DrawingFile',$data)) { foreach($request->file('DrawingFile') as $key=>$file) { if ($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'= >$filepath, 'DrawingNo'=>$data['DrawingNo'][$key],'DocumentType'=>$data['Type'][$key]); DB::table('fileupload')->insert($DocumentData2); } } } }</pre> <p><br /></p>
P粉770375450
P粉770375450

reply all(1)
P粉154228483

If you wish to prevent the same file from being uploaded multiple times in different subdirectories, you can take advantage of Laravel's Filesystem and check whether the file exists before trying to upload it.

The File facade provides an exists method that you can use to check whether a file in a given path exists.

Here's how you might modify it:


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);
                }
            }
        }
    }
}

The above code will only upload if the file does not exist in the specified directory. If the file already exists, an error response with the message 'File already exists' is returned.

One thing to note is the behavior of the getClientOriginalName() method. It will return the original name of the file from the client machine, which may cause problems if files from different clients have the same name. If this is a problem, consider implementing a unique naming convention when uploading.

Also, remember to import the necessary classes at the top of the file and take care to handle any potential issues such as missing required fields or failed database inserts.


Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!