在Laravel中移动文件之前的getMimeType()

问题描述 投票:0回答:1

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

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(),如何修改我的代码?

最佳方法是什么?

应用程序给我一个错误

laravel controller categories store
1个回答
0
投票

将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,
    ]);
© www.soinside.com 2019 - 2024. All rights reserved.