jeudi 29 juin 2017

Heroku Buffer Limits - Uploading Issues on Laravel App

I'm running into an interesting problem after hosting my Laravel application on Heroku. I am using S3 to store all images, and the database is hosted on Postgres. Locally I am able to upload files of any size (15mb+) to S3, and have Image Intervention generate their thumbnails properly. However after hosting on Heroku I cannot upload any images over 1MB. In their limitation section, Heroku caps the HTTP response buffering at 1MB (Link: http://ift.tt/2uo7sbN). I am not experienced enough to tell if this is the issue though....

The console errror I get when trying to upload a larger image previews out to this:

(1/1) ErrorException Trying to get property of non-object in ImageUploadController.php (line 23)

Here is my ImageUploadController code:

<?php

namespace App\Http\Controllers\Images;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Models\Listing;
use Storage;
use App\Traits\ImageUploader;
use App\Models\Photo;

class ImageUploadController extends Controller
 {
use ImageUploader;

public function store(Listing $listing, Request $request)
{
    $this->authorize('imageUD', $listing);

    $photo=$this->uploadImages($request->file('file'), $listing->id);

    return response()->json([
      'photo_id' => $photo->id,
      'listing_id' => $listing->address
    ]);

}

public function destroy(Listing $listing, Photo $photo, Request $request)
{
    $this->authorize('imageUD', $listing); 
    Storage::disk('s3')->delete($photo->original_name);
    Storage::disk('s3')->delete($photo->thumbnail_name);

    $photo->delete();
}


}

And here is my ImageUploader Trait:

<?php

namespace App\Traits;
use App\Models\Photo;
use Image;
use Storage;
use Aws\S3;

trait ImageUploader
{
 //takes in array of images and a listing id
public function uploadImages($image, $id)
{
   if($image){
            $imageName = time().$image->getClientOriginalName();
            $imageNameOriginal = "original-" . $imageName;
            $imageNameThumbnail = "thumbnail-" . $imageName;
            $img = Image::make($image->getRealPath());
            $imageThumbnail= $img->resize(null, 225, function ($constraint) {
                 $constraint->aspectRatio();
             })->resizeCanvas(300, 225)->stream();
            //$s3 = Aws\S3\S3Client::factory();
            $s3=Storage::disk('s3')->put($imageNameOriginal, file_get_contents($image), 'public');
            $s3=Storage::disk('s3')->put($imageNameThumbnail, $imageThumbnail->__toString(), 'public');

            $imageNameOriginalURL = Storage::disk('s3')->url($imageNameOriginal);
            $imageNameThumbnailURL = Storage::disk('s3')->url($imageNameThumbnail);

            //create Database Settings
            $photo = new Photo;
            $photo->original_name=$imageNameOriginal;
            $photo->thumbnail_name=$imageNameThumbnail;
            $photo->original_url=$imageNameOriginalURL;
            $photo->thumbnail_url=$imageNameThumbnailURL;

            $photo->listing_id=$id;
            $photo->save();
            return $photo;
      // }
   }

return;
}

public function getFileNames($image)
{
dd($image);
$imageName = time().$image->getClientOriginalName();
$imageNameOriginal = "original-" . $imageName;
$imageNameThumbnail = "thumbnail-" . $imageName;

return [$imageNameOriginal, $imageNameThumbnail];
}
}



via Chebli Mohamed

Aucun commentaire:

Enregistrer un commentaire