Laravel загрузка файла без изменения имени - PullRequest
0 голосов
/ 22 февраля 2020

Я хочу загрузить файлы в мой laravel проект. Но я признаю, что laravel случайно меняет имя моего файла. Как загрузить файлы на laravel без изменения его имени. Также как-то моя проверка не работает. Я только что был перенаправлен без каких-либо сообщений. это мой клинок

//show errors
@if ($errors->any())
    <div class="alert alert-danger">
        <ul>
        @foreach ($errors->all() as $error)
            <li>{{ $error }}</li>
        @endforeach
         /ul>
    </div>
@endif
// forms
<form action="{{ route('designers.store') }}" method="post" enctype="multipart/form-data">
    {{ csrf_field() }}
    <div class="form-group d-flex flex-column">
        <label for="exampleInputFile">File input</label>
        <input type="file" name="files[]" multiple>
    </div>
    <button type="submit">Submit</button>
</form>

это мой контроллер

$data = $request->validate([
   'project' => 'required|numeric',
   'totalItem' => 'required|numeric',
   'files' => 'file',
]);
if ($request->hasFile('files')) {
    $allowedfileExtension=['pdf','jpg','png','docx','png','xlsx'];
    $files = $request->file('files');
    foreach ($files as $key => $value) {
        $filename = $value->getClientOriginalName();
        $extention = $value->getClientOriginalExtension();
        $check = in_array($extention,$allowedfileExtension);
        if ($check) {
            File::create([
              'name' => $value->store('designers','public'),
              'type' => 'designer',
              'project_id' => $data['project'],
              'user_id' => Auth::user()->id,
            ]);
        }
    }
}

1 Ответ

1 голос
/ 26 февраля 2020

Вы можете изменить свой контроллер на это:

use Illuminate\Support\Facades\Storage;

function yourFunction(){
    $this->validate($request,[
        'project'   => 'required|numeric',
        'totalItem' => 'required|numeric',
        'files'     => 'nullable|array|file|mimes:pdf,jpg,png,docx,xlsx' //This validates file and MIME type. Also if it isn't required, it should perhaps be nullable.
        ]);
    if($request->hasFile('files'){
        $files = $request->file('files');
        foreach($files as $file){
            $filename = $file->getClientOriginalName();
            Storage::disk('local')->put($filename, file_get_contents($file)); //This stores your file.
        }
    }
    //Save stuff to DB here
}

Официальный do c для хранения файлов: https://laravel.com/docs/5.8/filesystem
Официальный do c при проверке MIME https://laravel.com/docs/5.8/validation#rule мим

...