2014-01-12 69 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); 

希望这有助于。