2014-01-12 68 views
1

我想學習一種將圖像上傳到數據庫並讓用戶在網站上查看圖像的過程圖像窗體,這是使用Laravel 4完成的。我必須有某種錯誤,因爲視圖沒有任何錯誤,但是當我選擇要上傳的圖像並點擊表單上的「保存」按鈕時,除了看起來表單已經刷新,因爲文件已經消失,沒有任何反應。PHP Laravel框架上傳圖像處理

路線

// This is for the get event of the index page 
Route::get('/', array(
    'as' => 'index_page', 
    'uses' => '[email protected]' 
)); 

// This is for the post event of the index page 
Route::post('/', array(
    'as' => 'index_page_post', 
    'before' => 'csrf', 
    'uses' => '[email protected]' 
)); 

ImageController.php

class ImageController extends BaseController { 

public function getIndex() 
{ 
    // Let's first load the form view 
    return View::make('tpl.index'); 
} 

public function postIndex() 
{ 
    // Let's validate the form first with the rules which are set at the model 
    $input = Input::all(); 
    $rules = Photo::$upload_rules; 

    $validation = Validator::make($input, $rules); 

    // If the validation fails, we redirect the user to the index page, with errors 

    if ($validation->passes()) { 
     // If the validation passes, we upload the image to the database and process it 
     $image = Input::file('image'); 

     // This is the original uploaded client name of the image 
     $filename = $image->getClientOriginalName(); 
     // Because Symfony API does not provide filename 
     // without extension, we will be using raw PHP here 

     $filename = pathinfo($filename, PATHINFO_FILENAME); 

     // We should salt and make an url-friendly version of the file 
     $fullname = Str::slug(Str::random(8) . $filename) . '.' . 
      $image->getClientOriginalExtension(); 

     // We upload the image first to the upload folder, then 
     // get make a thumbnail from the uploaded image 
     $upload = $image->move 
      (Config::get('image.upload_folder'), $fullname); 

     Image::make(Config::get('image.thumb_folder').'/'.$fullname) 
      ->resize(Config::get('image.thumb_width'), null, true) 
      ->save(Config::get('image.thumb_folder').'/'.$fullname); 

     // If the file is now uploaded we show a success message 
     // otherwise, we show an error 

     if ($upload) { 
      // image is now uploaded, we first need to add column to the database 
      $insert_id = DB::table('photos')->insertGetId(
       array(
        'title' => Input::get('title'), 
        'image' => $fullname 
        ) 
       ); 
      // Now we redirect to the image's permalink 
      return Redirect::to(URL::to('snatch/'.$insert_id)) 
       ->with('success', 'Your image is uploaded successfully!'); 
     } 

     else { 
      // Image cannot be uploaded 
      return Redirect::to('/')->withInput() 
       ->with('error', 'Sorry, the image could not be uploaded.'); 
     } 
    } 
    else { 
     return Redirect::to('/') 
      ->withInput() 
      ->withErrors($validation); 
    } 
} 

圖像模型

class Photo extends Eloquent { 

// the variable that sets the table name 
protected $table = 'photos'; 

// the variable that sets the table name 
protected $fillable = array('title', 'image'); 

// the timestamps enabled 
public $timestamps = true; 

// Rules of the image upload form 
public static $upload_rules = array(
     'title' => 'required|min:3', 
     'image' => 'required|image' 
    ); 

}

爲形式的視圖

@extends('frontend_master') 

@section('content') 

{{ Form::open(array('url' => '/', 'files' => true)) }} 

{{ Form::text('title', '', array(
    'placeholder' => 'Please insert your title here')) }} 

{{ Form::file('image') }} 

{{ Form::submit('save', array('name' => 'send')) }} 

{{ Form::close() }} 

@stop 

讓我知道,如果你能找到任何錯誤,我敢肯定的東西必須在我ImageController是想錯了@ postIndex

感謝任何見解

回答

0

兩件事情你需要檢查。

首先,您更新了composer.json以包含干預/圖像包。你應該運行composer dump-autoload刷新自動加載文件。

第二,您的控制器存在邏輯錯誤。

Image::make(Config::get('image.thumb_folder').'/'.$fullname) 
    ->resize(Config::get('image.thumb_width'), null, true) 
    ->save(Config::get('image.thumb_folder').'/'.$fullname); 

應該

Image::make(Config::get('image.image_folder').'/'.$fullname) 
    ->resize(Config::get('image.thumb_width'), null, true) 
    ->save(Config::get('image.thumb_folder').'/'.$fullname); 

,因爲你已經離開圖像文件與下面的代碼image_folder:

$upload = $image->move 
    (Config::get('image.upload_folder'), $fullname); 

希望這有助於。