Getting Error: NotReadableException in AbstractDecoder.php line 302
Getting Error: NotReadableException in AbstractDecoder.php line 302
我正在关注一个关于如何使用 PHP、Laravel 5.1、MySQL、InterventionImage 插件保存照片并将其调整为缩略图大小的教程,当我尝试添加照片:
AbstractDecoder.php 第 302 行中的 NotReadableException:图像源不可读
问题似乎出在下面的 makeThumbnail 方法中的照片代码中。原始照片存储在我的 flyers/photo 文件夹中,但从未创建缩略图文件,照片也未存储在数据库中。我已经按照所有步骤检查了路线、模型、视图控制器,但一切似乎都与教程相同,所以我不确定我在做什么 wrong.The 如果我 dd() 此函数,错误将停止显示,但经过多次尝试后,我未能修复它。
照片eloquent模特:
<?php
namespace App;
use Intervention\Image\Facades\Image;
use Illuminate\Database\Eloquent\Model;
use Symfony\Component\HttpFoundation\File\UploadedFile;
class Photo extends Model
{
protected $table = 'flyer_photos';
protected $fillable = ['path' , 'name' , 'thumbnail_path'];
protected $baseDir = 'flyer/photos';
public function flyer(){
// creates a new instance of a photo
return $this->belongsTo('App\Flyer');
}
/**
* Build a photo instance from a file upload
*/
public static function named($name){
return (new static)->saveAs($name);
}
/**
* Setting name, path, and thumbnail_path parameters for Photo instance
*/
protected function saveAs($name){
//concatenate file name with current time to prevent duplicate entries in db
$this->name = sprintf("%s-%s", time(), $name);
$this->path = sprintf("%/%s", $this->baseDir, $this->name);
$this->thumbnail_path =sprintf("%s/tn-%s", $this->baseDir, $this->name);
return $this;
}
public function move(UploadedFile $file){
// move the file to new location in flyer/photos
$file->move($this->baseDir, $this->name);
$this->makeThumbnail();
return $this;
}
/**
* Change sizing of thumbnail and save it
*/
protected function makeThumbnail() {
//dd('error test');
Image::make($this->path)
->fit(200)
->save($this->thumbnail_path);
}
控制器代码:
<?php
namespace App\Http\Controllers;
use App\Flyer;
use Illuminate\Http\Request;
use App\Http\Requests\FlyerRequest;
use App\Http\Controllers\Controller;
use App\Http;
use App\Photo;
use Symfony\Component\HttpFoundation\File\UploadedFile;
class FlyersController extends Controller
{
/**
* Auth checks to make sure you are logged in before making any adjustments
*/
public function __construct()
{
$this->middleware('auth', ['except' => ['show']]);
}
/**
* Display a listing of the resource.
*/
public function index()
{
//
}
/**
* Show the form for creating a new resource.
*/
public function create()
{
flash()->overlay('Hello World', 'this is the message');
return view('flyers.create');
}
/**
* Store a newly created resource in storage.
*/
public function store(FlyerRequest $request)
{
//persist the flyer
Flyer::create($request->all());
//flash messaging
flash()->success('Success!', 'Your flyer has been created.');
return view('pages.home');//temporary redirect the landing page
}
/**
* Display the specified resource.
*/
public function show($zip, $street)
{
//find the new flyer
$flyer = Flyer::locatedAt($zip, $street);
return view('flyers.show', compact('flyer'));
}
/**
* Apply photo to the referenced flyer.
*/
public function addPhoto($zip, $street, Request $request){
//confirmtion that the photo file will be in appropriate format types
$this->validate($request, [
'photo' => 'required|mimes:jpg,jpeg,png,bmp'
]);
//build up our photo instance taking the file from dropzone plugin
$photo = $this->makePhoto($request->file('photo'));
//Save photo and associate it with the Flyer
Flyer::locatedAt($zip, $street)->addPhoto($photo);
}
protected function makePhoto(UploadedFile $file){
//get new photo object with current name
return Photo::named($file->getClientOriginalName())->move($file);
}
}
您的路径似乎没有在此处正确设置:
$this->path = sprintf("%/%s", $this->baseDir, $this->name);
不应该是...
$this->path = sprintf("%s/%s", $this->baseDir, $this->name);
我做了同样的教程,你应该这样做
Image::make($this->path.$this->name)->resize(128, 128)->save($this->thumbnail_path.$this->name);
而不是这样做
Image::make($this->path)->fit(200)->save($this->thumbnail_path);
我正在关注一个关于如何使用 PHP、Laravel 5.1、MySQL、InterventionImage 插件保存照片并将其调整为缩略图大小的教程,当我尝试添加照片:
AbstractDecoder.php 第 302 行中的 NotReadableException:图像源不可读
问题似乎出在下面的 makeThumbnail 方法中的照片代码中。原始照片存储在我的 flyers/photo 文件夹中,但从未创建缩略图文件,照片也未存储在数据库中。我已经按照所有步骤检查了路线、模型、视图控制器,但一切似乎都与教程相同,所以我不确定我在做什么 wrong.The 如果我 dd() 此函数,错误将停止显示,但经过多次尝试后,我未能修复它。
照片eloquent模特:
<?php
namespace App;
use Intervention\Image\Facades\Image;
use Illuminate\Database\Eloquent\Model;
use Symfony\Component\HttpFoundation\File\UploadedFile;
class Photo extends Model
{
protected $table = 'flyer_photos';
protected $fillable = ['path' , 'name' , 'thumbnail_path'];
protected $baseDir = 'flyer/photos';
public function flyer(){
// creates a new instance of a photo
return $this->belongsTo('App\Flyer');
}
/**
* Build a photo instance from a file upload
*/
public static function named($name){
return (new static)->saveAs($name);
}
/**
* Setting name, path, and thumbnail_path parameters for Photo instance
*/
protected function saveAs($name){
//concatenate file name with current time to prevent duplicate entries in db
$this->name = sprintf("%s-%s", time(), $name);
$this->path = sprintf("%/%s", $this->baseDir, $this->name);
$this->thumbnail_path =sprintf("%s/tn-%s", $this->baseDir, $this->name);
return $this;
}
public function move(UploadedFile $file){
// move the file to new location in flyer/photos
$file->move($this->baseDir, $this->name);
$this->makeThumbnail();
return $this;
}
/**
* Change sizing of thumbnail and save it
*/
protected function makeThumbnail() {
//dd('error test');
Image::make($this->path)
->fit(200)
->save($this->thumbnail_path);
}
控制器代码:
<?php
namespace App\Http\Controllers;
use App\Flyer;
use Illuminate\Http\Request;
use App\Http\Requests\FlyerRequest;
use App\Http\Controllers\Controller;
use App\Http;
use App\Photo;
use Symfony\Component\HttpFoundation\File\UploadedFile;
class FlyersController extends Controller
{
/**
* Auth checks to make sure you are logged in before making any adjustments
*/
public function __construct()
{
$this->middleware('auth', ['except' => ['show']]);
}
/**
* Display a listing of the resource.
*/
public function index()
{
//
}
/**
* Show the form for creating a new resource.
*/
public function create()
{
flash()->overlay('Hello World', 'this is the message');
return view('flyers.create');
}
/**
* Store a newly created resource in storage.
*/
public function store(FlyerRequest $request)
{
//persist the flyer
Flyer::create($request->all());
//flash messaging
flash()->success('Success!', 'Your flyer has been created.');
return view('pages.home');//temporary redirect the landing page
}
/**
* Display the specified resource.
*/
public function show($zip, $street)
{
//find the new flyer
$flyer = Flyer::locatedAt($zip, $street);
return view('flyers.show', compact('flyer'));
}
/**
* Apply photo to the referenced flyer.
*/
public function addPhoto($zip, $street, Request $request){
//confirmtion that the photo file will be in appropriate format types
$this->validate($request, [
'photo' => 'required|mimes:jpg,jpeg,png,bmp'
]);
//build up our photo instance taking the file from dropzone plugin
$photo = $this->makePhoto($request->file('photo'));
//Save photo and associate it with the Flyer
Flyer::locatedAt($zip, $street)->addPhoto($photo);
}
protected function makePhoto(UploadedFile $file){
//get new photo object with current name
return Photo::named($file->getClientOriginalName())->move($file);
}
}
您的路径似乎没有在此处正确设置:
$this->path = sprintf("%/%s", $this->baseDir, $this->name);
不应该是...
$this->path = sprintf("%s/%s", $this->baseDir, $this->name);
我做了同样的教程,你应该这样做
Image::make($this->path.$this->name)->resize(128, 128)->save($this->thumbnail_path.$this->name);
而不是这样做
Image::make($this->path)->fit(200)->save($this->thumbnail_path);