首页 > 解决方案 > 在 Laravel 中移动文件之前的 getMimeType()

问题描述

这是我的应用程序的一部分,我用来放置管理员可以从中选择文件类别的部分...

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()在移动它之前使用它,如何修改我的代码?

最好的方法是什么?

应用程序给我一个错误

标签: laravelcontrollercategoriesstore

解决方案


create在移动文件并在函数中使用之前将 mime 类型保存为变量

$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,
    ]);

推荐阅读