【问题标题】:Getting Error: NotReadableException in AbstractDecoder.php line 302出现错误:AbstractDecoder.php 第 302 行中的 NotReadableException
【发布时间】:2015-11-01 23:27:49
【问题描述】:

我正在关注如何使用 PHP、Laravel 5.1、MySQL、InterventionImage 插件保存照片并将其调整为缩略图大小的教程,当我尝试添加照片时出现以下错误:

AbstractDecoder.php 第 302 行中的 NotReadableException:图像源不可读

似乎问题出在 ma​​keThumbnail 方法中下面的照片代码中。原始照片存储在我的传单/照片文件夹中,但从未创建缩略图文件,并且照片未存储在数据库中。我已经按照所有步骤检查了路由、模型、视图控制器,但一切似乎都与教程相同,所以我不确定我做错了什么。如果我 dd() 这个函数,错误就会停止出现,但我经过多次尝试后无法修复它。

照片雄辩模型:

<?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);
}
}

【问题讨论】:

    标签: php laravel laravel-5.1 intervention


    【解决方案1】:

    您的路径似乎在此处设置不正确:

    $this->path = sprintf("%/%s", $this->baseDir, $this->name);
    

    那不应该是……

    $this->path = sprintf("%s/%s", $this->baseDir, $this->name);
    

    【讨论】:

      【解决方案2】:

      我做了同样的教程,你应该这样做

      Image::make($this-&gt;path.$this-&gt;name)-&gt;resize(128, 128)-&gt;save($this-&gt;thumbnail_path.$this-&gt;name);

      而不是这样做

      Image::make($this-&gt;path)-&gt;fit(200)-&gt;save($this-&gt;thumbnail_path);

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-07-07
        • 2013-06-01
        • 2023-04-05
        • 2012-03-30
        • 2023-03-07
        • 1970-01-01
        相关资源
        最近更新 更多