【问题标题】:Upload image with Laravel 6使用 Laravel 6 上传图片
【发布时间】:2020-03-25 06:06:41
【问题描述】:

我正在尝试上传图片,但是当我提交表单时,什么也没有发生。我最终在数据库中有一个空的图像文件夹和一个null 图像字段。到目前为止,我已经在网上尝试了许多潜在的解决方案。

控制器

class ReportsController extends Controller
{
    /**
     * Only logged in users can access reports.
     */

    public function __construct()
    {
        $this->middleware('auth');
    }

    public function index()
    {
        $reports = Report::with(['victim', 'lost_vehicle'])->get();
        return view('reports.index')->with('reports', $reports);
    }

    public function create()
    {
        return view('reports.create');
    }

    public function store(ReportRequest $request)
    {
        $userid = Auth::user()->id;
        request()->validate([
            // 'image' => 'required|image|mimes:jpeg,png,jpg,gif,svg',
        ]);
        $victim = Victim::create([
            'vic_name' => $request->input('name'),
            'vic_statment' => $request->input('statment'),
            'case_id' => uniqid(),
            'report_status' => $request->input('status'),
            'user_id' => $userid,
        ]);

        if ($files = $request->file('image')) {
            $carImage = time().'.'.$files->getClientOriginalExtension();
            $request->image->move(public_path('images'), $carImage);
            $victim->lost_vehicles()->create([
                'image' => $carImage,
            ]);
        }
        $victim->lost_vehicles()->create([
            'type' => $request->input('type'),
            'model' => $request->input('model'),
            'production_year' => $request->input('year'),
            'color' => $request->input('color'),
            'value' => $request->input('value'),
            'marks' => $request->input('marks'),
            'plate_number' => $request->input('plate'),
            'chassis_number' => $request->input('chassis'),
            'last_location' => $request->input('location'),
            'last_time_spotted' => $request->input('last_time_spotted'),
            'victim_id' => $victim->id,
        ]);

        return dd($victim);
    }
}

我将表单设置为接受文件{!! Form::open(['url'=>'reports'], array('files'=> true)) !!}

【问题讨论】:

  • Form::open 只需要 1 个参数

标签: php laravel image-uploading laravel-6


【解决方案1】:

您的这部分代码有问题:

if ($files = $request->file('image')) {
    ...
    $victim->lost_vehicles()->create([
        'image' => $carImage,
    ]);
}
$victim->lost_vehicles()->create([
    ...
]);

您正确地检查了$request->file('image') 的存在,但您调用了两次$victim->lost_vehicles()->create()。如果lost_vehicleshasMany() 关系,这很好,但您最终会在数据库中得到2 条记录,一条有图像但没有信息,另一条将有所有信息但没有图像。考虑重构:

$image = null;
if ($files = $request->file('image')) {
    $carImage = time().'.'.$files->getClientOriginalExtension(); 
    $request->image->move(public_path('images'), $carImage);

    $image = $carImage;
}

$victim->lost_vehicles()->create([
    'type' => $request->input('type'),
    'model' => $request->input('model'),
    'production_year' => $request->input('year'),
    'color' => $request->input('color'),
    'value' => $request->input('value'),
    'marks' => $request->input('marks'),
    'plate_number' => $request->input('plate'),
    'chassis_number' => $request->input('chassis'),
    'last_location' => $request->input('location'),
    'last_time_spotted' => $request->input('last_time_spotted'),
    'victim_id' => $victim->id,
    'image' => $image
]);

它的作用是最初将$image 设置为null,然后如果您的检查通过,则将其设置为代表上传图像的字符串。然后,它包含在下面的create() 方法中,并且您应该关联了所有数据。

除此之外,我还没有看到上传图片的方法。我用:

\Storage::disk("local")->putFileAs("images", $files, $carImage);
// Modified to fit your variable names

还要确保您已调用 php artisan storage:link 以将 storage/app 正确链接到 public

【讨论】:

  • 我完全按照你说的做了,但图片名称仍然没有保存在数据库中,文件也没有移动到存储中!
  • 嗯...你有什么错误吗?我认为如果没有相关错误(由于权限、位置无效等原因无法移动文件),这种情况不会发生。
  • 没有得到任何错误,所有字段都被插入到数据库中,除了图像字段
  • 不,那条线应该不是问题。我看不出Form::file() 调用有什么问题,但我个人不使用Form:: 方法。它是否生成以下 HTML:<input type="file" name="image" class="form-control"/>?另外,您的<form> 元素是否有enctype="multipart/form-data"? (您必须通过浏览器检查您的页面才能看到计算出的 HTML)
  • 嗯,我认为这就是 'files' => true 条目的作用。那应该在同一个数组中吗? {!! Form::open(['url'=>'reports', 'files' => true]) !!}?
猜你喜欢
  • 2020-07-03
  • 1970-01-01
  • 2016-08-16
  • 2020-07-04
  • 2020-01-20
  • 2019-04-15
  • 1970-01-01
  • 2019-05-30
  • 2017-06-04
相关资源
最近更新 更多