2017-09-14 61 views
1

你好,我需要你們的幫助。我創建一個laravel項目中,我已經修改了默認用戶表,用於存儲用戶的更多的信息像用戶圖像文件名。因此,我不得不修改'RegisterController'類,其中'創建'功能已被修改,並且我還添加了'更新'方法來存儲上傳的圖像文件。下面是我的「RegisterController」類的代碼:未存儲在laravel項目中的圖像文件

protected function update(array $data) 
{ 
    $path = $data['img']->storeAs('/public','ohgod '); 
    return $path; 
} 


protected function create(array $data) 
{ 

    $filename; 


     $filename = $data['img']->getClientOriginalName(); 
     $filesize = $data['img']->getClientSize(); 
     $this->update($data); 


    return User::create([ 
     'name' => $data['name'], 
     'img_name' => $filename, 
     'img_size' => $filesize, 
     'username' => $data['username'], 
     'dob' => $data['dob'], 
     'email' => $data['email'], 
     'password' => bcrypt($data['password']), 
    ]); 
} 

有了這個,我也不得不修改形式得到添加的用戶的信息。現在,當我註冊爲新用戶時,我可以在用戶表中獲得一切,但圖像文件未存儲在服務器中。

我是laravel中的新手,所以我不知道我的代碼有什麼問題。我也沒有收到任何錯誤消息。所以幫幫我吧。

我得到的文件從laravel官方網站存儲代碼https://laravel.com/docs/5.5/filesystem

回答

2

你必須移動圖像插入到數據庫之前,文件夾

$destinationPath='images'; 
     $filename = $data['img']->getClientOriginalName(); 

     //move iamge to folder 
     $fileName = str_random(30).'.'.$data['img']->clientExtension(); 
     $data['img']->move($destinationPath, $fileName); 

移動的文件將公開提供/ images文件夾

+0

遺憾它沒有工作,它說未定義varialble $文件 –

+0

只是更改爲$文件名 – iCoders

+0

它說串 –

0
$image = time().'.'.$data['img']->getClientOriginalExtension(); 

$ data ['img'] - > move(public_path('images'),$ image);

在發送到數據庫之前將圖像存儲在公共圖像文件夾中的最佳方式。

+0

謝謝曼它工作。 !!你搖滾! –

0

如果您正在使用laravel形式再使用

{!! Form::open(['url' => url('background'), `'files'=>true,` 'method' => 'post', 'class' => 'form-horizontal']) !!} 

,如果你使用的是簡單的HTML表單,然後使用下面的代碼

<form enctype="multipart/form-data"><form> 

我希望它爲你工作。

1

,你可以去照亮\基金會\身份驗證\ RegistersUsers特質,並把你的形象代碼到寄存器方法

public function register(Request $request) 
{ 
    $this->validator($request->all())->validate(); 
    $fields = $request->all(); 
    if ($request->hasFile('avatar')) 
     $fields['avatar'] = $request->avatar->store('users', ['disk' => 'public']); 

    $user = $this->create($fields); 

    event(new Registered($user)); 

    $this->guard()->login($user); 

    return $this->registered($request, $user) 
     ?: redirect($this->redirectPath()); 
} 

然後去到App \ HTTP \控制器\驗證\ RegisterController並追加圖像轉換成數據陣列中create方法

protected function create(array $data) 
{ 

    return User::create([ 
     'name' => $data['name'], 
     'username' => $data['username'], 
     'email' => $data['email'], 
     'password' => bcrypt($data['password']), 
     'avatar' => $data['avatar'], 
     'headline' => $data['headline'], 
     'summary' => $data['summary'], 
    ]); 
} 
+0

此解決方案是否將圖像保存在數據庫和服務器公用文件夾中。因爲我想保存圖像,只能在公共文件夾中爲上傳的圖像指定一個唯一的名稱。而在數據庫中,我只想保存圖像名稱和大小而不是圖像本身。 –

+0

這個大小保存數據庫中的圖像路徑,您可以檢測註冊方法中的圖像大小,並將其保存到字段數組,並在創建方法 –

+0

中從數據數組訪問它們。謝謝先生。這是迄今爲止我得到的最好的方法。 –

相關問題