getMimeType () перед перемещением файла в Laravel - PullRequest
0 голосов
/ 30 сентября 2019

Это часть моего приложения, которую я использую, чтобы разместить раздел, в котором администратор может выбрать категорию файла из ...

File Model

namespace App\Models;

use App\Traits\Categorizeable;
use Illuminate\Database\Eloquent\Model;

class File extends Model
{
    use Categorizeable;
    protected $primaryKey = 'file_id';
    protected $guarded = ['file_id'];

    public function packages()
    {
        return $this->belongsToMany(Package::class, 'package_file');
    }
}

В любом случае, яиспользовал черту для этого ... после этого это мое мнение:

<div class="form-group">
    <label for="categorize"> categories :</label>
    <select name="categorize[]" id="categorize" class="select2 form-control" multiple>
        @foreach($categories as $cat)
        <option value="{{$cat->category_id}}"
            {{isset($file_categories) && in_array($cat->category_id,$file_categories) ? 'selected' :'' }}>
            {{$cat->category_name}}</option>
        @endforeach
    </select>
</div>

наконец-то это мое FilesController:

public function store(Request $request)
{
    // $this->validate();....
    //after validation

    $new_file_name = str_random(45) . '.' . $request->file('fileItem')->getClientOriginalExtension();

    $result = $request->file('fileItem')->move(public_path('files'), $new_file_name);
    if ($result instanceof \Symfony\Component\HttpFoundation\File\File) {
        $new_file_data['file_name'] = $new_file_name;
        $new_file_data = File::create([
            'file_title' => $request->input('file_title'),
            'file_description' => $request->input('file_description'),
            'file_type' => $request->file('fileItem')->getMimeType(),
            'file_size' => $request->file('fileItem')->getClientSize(),
        ]);
        if ($new_file_data) {
            if ($request->has('categorize')) {
                $new_file_data->categories()->sync($request->input('categorize'));
            }
            return redirect()->route('admin.files.list')->with('success', 'message');
        }
    }
}

Теперь, что моя проблема в том, что высм. file() сначала сохраняет файл .tmp, и мне нужно использовать getMimeType() перед его перемещением, как изменить мой код?

Каков наилучший способ сделать это?

Приложение выдает ошибку

1 Ответ

0 голосов
/ 30 сентября 2019

Сохраните MIME-тип как переменную перед перемещением файла и используйте его в функции create

$new_file_name = str_random(45) . '.' . $request->file('fileItem')->getClientOriginalExtension();
$mime_type = $request->file('fileItem')->getMimeType();
$file_size = $request->file('fileItem')->getClientSize();
$result = $request->file('fileItem')->move(public_path('files'), $new_file_name);
if ($result instanceof \Symfony\Component\HttpFoundation\File\File) {
    $new_file_data['file_name'] = $new_file_name;
    $new_file_data = File::create([
        'file_title' => $request->input('file_title'),
        'file_description' => $request->input('file_description'),
        'file_type' => $mime_type,
        'file_size' => $file_size,
    ]);
...