【问题标题】:Saving images with Laravel使用 Laravel 保存图像
【发布时间】:2020-10-08 13:01:36
【问题描述】:

由于某种原因,这不允许我从表单上传图片,我不明白为什么会发生这种情况,我的错误在哪里?

<div class="row">
{!! Form::model($user, [
    'route' => $user->exists ? ['admin.users.update', $user->id] : 'admin.users.store',   
    'files' => true, 
    'enctype' => 'multipart/form-data',   
    'method' => $user->exists ? 'PUT' : 'POST'
]) !!}

 <div class="col-md-4">
        <div class="box box-primary">
            <div class="box-header with-border">
                <h3 class="box-title">Perfil</h3>                
            </div>
            <div class="box-body">                   
                <img width="300px" class="profile-user-img img-responsive img-circle" 
                    src="{{ Storage::url($user->user_photo)}}"                  
                    alt="{{ $user->name}}">
                    &nbsp;
                    &nbsp;
                <div class="form-group">              
                {!! Form::label('user_photo', 'Imagen de Perfil') !!}                    
                {!! Form::file('user_photo') !!}
                </div>
            </div>
        </div>       
    </div> 
{!! Form::close() !!}    
</div>

这是我尝试存储从控制器输入的信息的方式

<?php

namespace App\Http\Controllers;

use App\User;
use App\Statu;
use DataTables;
use Carbon\Carbon;
use Illuminate\Http\Request;
use App\Providers\UserWasCreated;
use Illuminate\Support\Facades\DB;
use App\Http\Requests\SaveUserRequest;
use Illuminate\Support\Facades\Storage;

class UserController extends Controller
{

    public function store(SaveUserRequest $request)
    {
        if ($request->ajax()){
            try {
                //  Transacciones
                DB::beginTransaction();

                // Creamos el usuario            
                $user = new User;   
                $user->name         = $request->get('name');
                $user->surname      = $request->get('surname');
                $user->nickname     = $request->get('nickname');
                $user->email        = $request->get('email');        
                $user->password     = $request->get('password');
                $user->gender       = $request->get('gender');  
                $user->address      = $request->get('address');
                $user->postcode     = $request->get('postcode');  
                $user->city         = $request->get('city');
                $user->province     = $request->get('province');  
                $user->phone        = $request->get('phone');
                $user->birthdate    = Carbon::parse($request->get('birthdate'));                      
                $user->status_id    = $request->get('status_id');            


                if ($request->hasFile('user_photo'))
                {
                    $user->user_photo = $request->file('user_photo')->store('public');
                }
                $user->save();

                // Enviamos el email
                // UserWasCreated::dispatch($user, $data['password']);
                //$user->update($request->validated()); 

                DB::commit();

            } catch (Exception $e) {
                // anula la transacion
                DB::rollBack();
            }
        }    
    }
}

在保存之前,我用 dd ($ user) 进行了验证;

 if ($request->hasFile('user_photo'))
                {
                    $user->user_photo = $request->file('user_photo')->store('public');
                }
                dd($user); 
                $user->save();

经过检查,我看到字段 user_photo 存在于内部

#fillable: array: 14 [
    13 => "user_photo"
  ]

但它不在里面

#attributes: array: 13

所有验证结果:

App\User {#1747
  #fillable: array:14 [
    0 => "status_id"
    1 => "surname"
    2 => "nickname"
    3 => "email"
    4 => "email_verified_at"
    5 => "password"
    6 => "gender"
    7 => "birthdate"
    8 => "province"
    9 => "city"
    10 => "address"
    11 => "postcode"
    12 => "phone"
    13 => "user_photo"
  ]
  #dates: array:1 [
    0 => "birthdate"
  ]
  #hidden: array:2 [
    0 => "password"
    1 => "remember_token"
  ]
  #casts: array:1 [
    "email_verified_at" => "datetime"
  ]
  #connection: null
  #table: null
  #primaryKey: "id"
  #keyType: "int"
  +incrementing: true
  #with: []
  #withCount: []
  #perPage: 15
  +exists: false
  +wasRecentlyCreated: false
  #attributes: array:13 [
    "name" => "Rodrigo"
    "surname" => "Ruiz"
    "nickname" => "rjr"
    "email" => "rjruizsf@gmail.com"
    "password" => "$2y$10$mZw/n4LpvK58bE3ghXx.NuabyduUhsA6FDmFBWVdjRBDaTVPJAaTO"
    "gender" => "Masculino"
    "address" => null
    "postcode" => null
    "city" => null
    "province" => "North Carolina"
    "phone" => "3434434"
    "birthdate" => "2020-06-17 00:00:00"
    "status_id" => "1"
  ]

我做错了什么? 请帮我解决一下

【问题讨论】:

  • 我几乎可以肯定我上传图片的步骤是正确的,但我怀疑这是否可行。 {!! Form::model($user, [ 'route' =&gt; $user-&gt;exists ? ['admin.users.update', $user-&gt;id] : 'admin.users.store', 'files' =&gt; true, 'enctype' =&gt; 'multipart/form-data', 'method' =&gt; $user-&gt;exists ? 'PUT' : 'POST' ]) !!}
  • 你检查了一个ajax请求if ($request-&gt;ajax()){但是你没有发出任何ajax请求?
  • @jackwebs hace 感谢您的观察,消除了太多的验证,您认为应该可以吗?

标签: php laravel laravel-blade laravelcollective


【解决方案1】:

语法: store('子文件夹', '文件系统');

上传的文件存储位置是store()函数中的第一个参数试试下面的一个

    if( $request->hasFile( $fieldName ) ) {
        $file = $request->file($fieldName);
        $fileloc = $file->store('profile_pic', 'public');
    }

存储在 storage/app/public/profile_pic/user1.jpg 中的文件像这样

【讨论】:

  • 还要配置文件系统文件吗?
猜你喜欢
  • 2014-10-10
  • 2021-05-24
  • 2016-02-13
  • 1970-01-01
  • 1970-01-01
  • 2019-11-02
  • 2017-12-29
  • 2016-01-11
  • 1970-01-01
相关资源
最近更新 更多