Skip to content

Commit

Permalink
Got image uploads working
Browse files Browse the repository at this point in the history
  • Loading branch information
ssddanbrown committed Jul 13, 2015
1 parent 5d2243e commit 1ec9466
Show file tree
Hide file tree
Showing 11 changed files with 329 additions and 6 deletions.
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,5 @@ Homestead.yaml
/public/dist
.idea
/public/plugins
/public/css
/public/css
/storage/images
89 changes: 89 additions & 0 deletions app/Http/Controllers/ImageController.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
<?php

namespace Oxbow\Http\Controllers;

use Illuminate\Filesystem\Filesystem as File;
use Illuminate\Http\Request;

use Oxbow\Http\Requests;
use Oxbow\Image;

class ImageController extends Controller
{
protected $image;
protected $file;

/**
* ImageController constructor.
* @param Image $image
* @param File $file
*/
public function __construct(Image $image, File $file)
{
$this->image = $image;
$this->file = $file;
}

/**
* Returns an image from behind the public-facing application.
* @param Request $request
* @return \Illuminate\Http\Response
*/
public function getImage(Request $request)
{
$cacheTime = 60*60*24;
$path = storage_path() . '/' . $request->path();
$modifiedTime = $this->file->lastModified($path);
$eTag = md5($modifiedTime . $path);
$headerLastModified = gmdate('r', $modifiedTime);
$headerExpires = gmdate('r', $modifiedTime + $cacheTime);

$headers = [
'Last-Modified' => $headerLastModified,
'Cache-Control' => 'must-revalidate',
'Pragma' => 'public',
'Expires' => $headerExpires,
'Etag' => $eTag
];

$browserModifiedSince = $request->header('If-Modified-Since');
$browserNoneMatch = $request->header('If-None-Match');
if($browserModifiedSince !== null && file_exists($path) && ($browserModifiedSince == $headerLastModified || $browserNoneMatch == $eTag)) {
return response()->make('', 304, $headers);
}

if(file_exists($path)) {
return response()->make(file_get_contents($path), 200, array_merge($headers, [
'Content-Type' => $this->file->mimeType($path),
'Content-Length' => filesize($path),
]));
}
abort(404);
}

/**
* Handles image uploads for use on pages.
* @param Request $request
* @return \Illuminate\Http\JsonResponse
*/
public function upload(Request $request)
{
$imageUpload = $request->file('file');
$name = $imageUpload->getClientOriginalName();
$imagePath = '/images/' . Date('Y-m-M') . '/';
$storagePath = storage_path(). $imagePath;
$fullPath = $storagePath . $name;
while(file_exists($fullPath)) {
$name = substr(sha1(rand()), 0, 3) . $name;
$fullPath = $storagePath . $name;
}
$imageUpload->move($storagePath, $name);
// Create and save image object
$this->image->name = $name;
$this->image->url = $imagePath . $name;
$this->image->save();
return response()->json(['link' => $this->image->url]);
}


}
4 changes: 4 additions & 0 deletions app/Http/routes.php
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,10 @@
Route::put('/{bookSlug}/{pageSlug}', 'PageController@update');
});

Route::post('/upload/image', 'ImageController@upload');

Route::get('/images/{any}', 'ImageController@getImage')->where('any', '.*');

Route::get('/', function () {
return view('base');
});
10 changes: 10 additions & 0 deletions app/Image.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<?php

namespace Oxbow;

use Illuminate\Database\Eloquent\Model;

class Image extends Model
{
//
}
Empty file modified bootstrap/cache/.gitignore
100644 → 100755
Empty file.
3 changes: 2 additions & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@
"type": "project",
"require": {
"php": ">=5.5.9",
"laravel/framework": "5.1.*"
"laravel/framework": "5.1.*",
"intervention/image": "^2.3"
},
"require-dev": {
"fzaninotto/faker": "~1.4",
Expand Down
171 changes: 170 additions & 1 deletion composer.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

11 changes: 11 additions & 0 deletions config/app.php
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,11 @@
Illuminate\Validation\ValidationServiceProvider::class,
Illuminate\View\ViewServiceProvider::class,

/**
* Third Party
*/
Intervention\Image\ImageServiceProvider::class,

/*
* Application Service Providers...
*/
Expand Down Expand Up @@ -192,6 +197,12 @@
'Validator' => Illuminate\Support\Facades\Validator::class,
'View' => Illuminate\Support\Facades\View::class,

/**
* Third Party
*/

'ImageTool' => Intervention\Image\Facades\Image::class,

],

];
32 changes: 32 additions & 0 deletions database/migrations/2015_07_13_172121_create_images_table.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
<?php

use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateImagesTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('images', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('url');
$table->timestamps();
});
}

/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::drop('images');
}
}
4 changes: 2 additions & 2 deletions resources/assets/sass/_text.scss
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,13 @@
*/

h1 {
font-size: 5.625em;
font-size: 3.625em;
line-height: 1.22222222em;
margin-top: 0.48888889em;
margin-bottom: 0.24444444em;
}
h2 {
font-size: 3.1875em;
font-size: 2.8275em;
line-height: 1.294117647em;
margin-top: 0.8627451em;
margin-bottom: 0.43137255em;
Expand Down
Loading

0 comments on commit 1ec9466

Please sign in to comment.