2016-05-29 15 views
0

Ich versuche ein Bild in Laravel mit Image Magick hochzuladen, umzuwandeln und zu speichern.Gespeicherte Bilder mit Laravel speichern 5

Innen App\Http\Controllers\ArticleController:

$image = $this->storeMainImage($request->file('thumbnail')); 

Die Funktion:

private function storeMainImage($file) { 
    $folder = 'uploads/images/'; <--- ????? 
    $code = uniqid(); 
    $thumb_code = $folder . 'thumb_' . $code . '.jpg'; 
    $image_code = $folder . $code . '.jpg'; 
    if(@is_array(getimagesize($file))){ 
    exec('convert '.$file.' -thumbnail 225x225^ -gravity center -extent 225x225 -compress JPEG -quality 70 -background fill white -layers flatten -strip -unsharp 0.5x0.5+0.5+0.008 '.$thumb_code); 
    exec('convert '.$file.' -compress JPEG -quality 70 -background fill white -layers flatten -strip -unsharp 0.5x0.5+0.5+0.008 '.$image_code); 
    return $image_code; 
    } else { 
    return false; 
    } 
} 

Ich bekomme keine Fehler mit diesem, aber ich habe keine Ahnung, ob es tatsächlich ist die Datei hochladen und wo abouts es Speicherung es.

+1

Versuchen Sie, Ihre 'folder' $ zu' public_path ändern ('uploads/images /') 'und dann nach Bildern in' p suchen ublic/uploads/images' Verzeichnis. –

+0

Alternativ können Sie sie in Ihrem Speicherverzeichnis speichern und eine Route verwenden, um sie wieder anzuzeigen, wenn Sie nicht möchten, dass sie öffentlich zugänglich sind. – Ohgodwhy

Antwort

0

Um mit Image Magick zu arbeiten, müssen Sie zuerst sicherstellen, dass Ihr Server dieses Modul hat. Sonst kannst du es installieren. See this to install imagemagick

Sonst können Sie Gd verwenden, indem Sie image.php Datei in Ihrem Config-Ordner konfigurieren. gd ist standardmäßig verfügbar

seit $folder = 'uploads/images/'; <--- ????? hat keinen Startpunkt angegeben, der Ausgangspunkt wird sein, wo Sie sind, wenn Sie das Skript ausführen. Um den Speicherpfad sicherzustellen, sollten Sie daher Ihren Pfad unter Verwendung von storage_path() oder public_path() definieren, wenn Sie den Ordner storage bzw. public speichern. Check here for more paths available entsprechend der Version, die Sie verwenden. Vorgegebener Link ist für Laravel 5.2. Sie können die Version in der oberen rechten Ecke der Seite ändern.

1

$ request-> file() zurückgeben können: \ Symfony \ Component \ HttpFoundation \ File \ UploadedFile oder Array oder null

Sie sollten es vor der Verarbeitung überprüfen. Dump es einfach mit var_dump ($ datei) oder dd ($ datei). Nicht sicher, aber es sollte keine Zeichenfolge sein.

Verwenden Sie public_path() für $ Ordner Variable, es wird Ihnen helfen, Probleme in Zukunft zu verhindern.

Und auch dieses tolle Paket prüfen Laravel: http://image.intervention.io/getting_started/introduction

+0

Dieses Paket ist großartig! Hatte keine Idee, wie man ImageMagick auf Mac OSX installiert, aber das verwendet standardmäßig GD, also ist alles gut. Wirklich einfach zu bedienen, danke. – frosty

0

Ich habe ein Skript aus, das mehrere Bilder/Dateien innerhalb Laravel unterstützt das Hochladen, die das Image Intervention-Paket verwendet. Dies kann nützlich für Sie und andere auf SO sein. Ich habe einige Kommentare hinzugefügt und unnötigen Code entfernt, um besser zu verstehen, was passiert.

HTML-Markup

<form method="post" action="{{ route('admin.upload.store') }}" enctype="multipart/form-data"> 
    {{!! csrf_field() !!}} 
    <input type="file" name="files[]" accept="image/gif, image/jpeg, image/png"> 
    <button type="submit">Upload image(s)</button> 
</form> 

UploadController

Verwendet Laravel eingebauten in RESTful Ressourcensteuerung Routen

/** 
* Store a newly created resource in storage. 
* Supports uploading multiple files at once. 
* 
* @param Request $request 
* @return Response 
*/ 
public function store(Request $request) 
{ 
    // Loop through the files array 
    foreach($request->file('files') as $file) { 

     // Validate each file, we want images only 
     $validator = Validator::make(compact('file'), [ 
      'files' => 'mimes:jpeg,bmp,gif,png' 
     ]); 

     if ($validator->fails()) { 
      return redirect()->route('admin.upload.index')->withErrors($validator); 
     } 

     // Create a new upload model for the file 
     $upload = new Upload([ 
      'name'  => pathinfo($file->getClientOriginalName(), PATHINFO_FILENAME) . '_' . Str::random(2), 
      'extension' => strtolower($file->getClientOriginalExtension()), 
      'mimetype' => $file->getMimeType(), 
      'size'  => $file->getSize(), 
     ]); 

     // Create the image 
     $file = Image::make($file)->widen(1200, function($constraint) { 
      $constraint->upsize(); // Prevent upsizing the image if doesn't exceed the maximum width 
     })->encode($upload->extension); 

     // Store it within 'storage/app/uploads' 
     Storage::disk('uploads')->put($upload->fullName(), $file); 

     // Save the upload file details in the database 
     $upload->save(); 
    } 

    return redirect()->route('admin.upload.index')->with(['success' => 'Files uploaded']); 
}