Browse Source

fix bugs

pull/2/head
Mohammad Khazaee 2 years ago
parent
commit
68568fb882
  1. 89
      app/Http/Controllers/FileController.php
  2. 2
      app/Http/Controllers/Traits/FileTrait.php
  3. 9
      app/Image/ImageProcessor.php
  4. 1
      docker-compose.yml

89
app/Http/Controllers/FileController.php

@ -0,0 +1,89 @@
<?php
namespace App\Http\Controllers;
use App\Http\Requests\FileStoreRequest;
use App\Http\Requests\FileUpdateRequest;
use App\Http\Resources\FileResource;
use App\Image\ImageProcessor;
use App\Models\File;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Response;
use Illuminate\Support\Facades\Storage;
class FileController extends Controller
{
public function show($collection, $uuid, $ext, Request $request, ImageProcessor $imageProcessor)
{
if ($request->castParams == 'resource') {
return new FileResource(app()->file);
}
if (!is_null(array_intersect(array_keys($request->all()), $this->availableParams))) {
$data = $imageProcessor->processToBuffer(app()->file->getPath(), $request->all());
$response = Response::make($data, 200);
$response->header('Content-Type','image/webp');
return $response;
}
return response()->file(app()->file->getPath());
}
public function store(FileStoreRequest $request, ImageProcessor $imageProcessor)
{
$request->file = $imageProcessor->convertImage($request->file->path(), '/tmp/' . app()->uuid . '.' . app()->collection->ext);
if (!is_null(app()->collection->process)) {
$request->file = $imageProcessor->process($request->file->path(), '/tmp/' . app()->uuid . '.' . app()->collection->ext, app()->collection->process);
}
$fileResource = null;
DB::transaction(function () use ($request, &$fileResource) {
$uuid = app()->uuid;
$fileResource = File::create([
'uuid' => $uuid,
'original_name' => $request->name,
'public' => $request->public,
'ext' => $request->file->extension(),
'mimetype' => $request->file->getMimeType(),
'width' => getimagesize($request->file)[0],
'height' => getimagesize($request->file)[1],
'file_size' => $request->file->getSize(),
'sort' => $request->file->getSize(),
'alts' => $request->alts,
'description' => $request->description,
'user_id' => auth()->id(),
'ip' => $request->ip(),
'collection_id' => app()->collection->id,
'published_at' => $request->published_at,
'server_path' => '/' . date('y') . '/' . date('m') . '/',
]);
if (!app()->collection->tmp_support && app()->collection->count == 1) {
File::where('user_id', auth()->id())->delete();
}
$storedFile = Storage::disk(app()->collection->disk)->putFileAs($fileResource->server_path, $request->file, $fileResource->uuid . '.' . app()->collection->ext);
if (app()->collection->public) {
Storage::disk(app()->collection->disk)->setVisibility($storedFile, 'public');
}
});
return new FileResource($fileResource);
}
public function update(FileUpdateRequest $request)
{
app()->file->update($request->all());
return new FileResource(app()->file);
}
public function destroy()
{
if (app()->file->trashed()) {
return app()->file->restore();
}
return app()->file->delete();
}
}

2
app/Http/Controllers/Traits/FileTrait.php

@ -4,5 +4,5 @@ namespace App\Http\Controllers\Traits;
trait FileTrait trait FileTrait
{ {
public $availableParams = ['r','w','h','canv','brightness','saturation','hue','rotation','flip'];
public $availableParams = ['q','r','w','h','canv','brightness','saturation','hue','rotation','flip'];
} }

9
app/Image/ImageProcessor.php

@ -99,7 +99,8 @@ class ImageProcessor
$widthH, $widthH,
$options['w'], $options['w'],
$options['h'], $options['h'],
['extend' => 'background', 'background' => 1024]
['extend' => 'background', 'background' => [255,255,255]]
); );
} else { } else {
$image = Image::thumbnail($filename, $options['w'], ['height' => $options['h'], 'crop' => 'centre']); $image = Image::thumbnail($filename, $options['w'], ['height' => $options['h'], 'crop' => 'centre']);
@ -131,6 +132,10 @@ class ImageProcessor
if (array_key_exists('q', $options)) { if (array_key_exists('q', $options)) {
$saveOptions['Q'] = $options['q']; $saveOptions['Q'] = $options['q'];
} }
if (app()->file->ext == 'png') {
$saveOptions = array_merge(['palette'=>true],$saveOptions);
}
return $image->writeToBuffer("." . app()->file->ext, $saveOptions); return $image->writeToBuffer("." . app()->file->ext, $saveOptions);
} }
@ -218,7 +223,7 @@ class ImageProcessor
$widthH, $widthH,
$options['w'], $options['w'],
$options['h'], $options['h'],
['extend' => 'background', 'background' => 1024]
['extend' => 'background', 'background' => 0]
); );
} else { } else {
$image = Image::thumbnail($filename, $options['w'], ['height' => $options['h'], 'crop' => 'centre']); $image = Image::thumbnail($filename, $options['w'], ['height' => $options['h'], 'crop' => 'centre']);

1
docker-compose.yml

@ -9,6 +9,7 @@ services:
- '8000:80' - '8000:80'
volumes: volumes:
- '.:/var/www/html' - '.:/var/www/html'
mysql: mysql:
image: 'mysql' image: 'mysql'
tmpfs: /var/lib/mysql tmpfs: /var/lib/mysql

Loading…
Cancel
Save