84 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			84 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| namespace App\Http\Controllers;
 | |
| 
 | |
| use Illuminate\Routing\Controller as BaseController;
 | |
| use Illuminate\Http\JsonResponse;
 | |
| use Pion\Laravel\ChunkUpload\Exceptions\UploadFailedException;
 | |
| use Illuminate\Http\Request;
 | |
| use Illuminate\Http\UploadedFile;
 | |
| use Illuminate\Support\Facades\Storage;
 | |
| use Pion\Laravel\ChunkUpload\Exceptions\UploadMissingFileException;
 | |
| use Pion\Laravel\ChunkUpload\Handler\AbstractHandler;
 | |
| use Pion\Laravel\ChunkUpload\Handler\HandlerFactory;
 | |
| use Pion\Laravel\ChunkUpload\Receiver\FileReceiver;
 | |
| 
 | |
| class UploadController extends BaseController
 | |
| {
 | |
|     public function upload(Request $request)
 | |
|     {
 | |
|         $resource = getResourceByUuid(request()->route('databaseUuid'), data_get(auth()->user()->currentTeam(), 'id'));
 | |
|         if (is_null($resource)) {
 | |
|             return response()->json(['error' => 'You do not have permission for this database'], 500);
 | |
|         }
 | |
|         $receiver = new FileReceiver("file", $request, HandlerFactory::classFromRequest($request));
 | |
| 
 | |
|         if ($receiver->isUploaded() === false) {
 | |
|             throw new UploadMissingFileException();
 | |
|         }
 | |
| 
 | |
|         $save = $receiver->receive();
 | |
| 
 | |
|         if ($save->isFinished()) {
 | |
|             return $this->saveFile($save->getFile(), $resource);
 | |
|         }
 | |
| 
 | |
|         $handler = $save->handler();
 | |
|         return response()->json([
 | |
|             "done" => $handler->getPercentageDone(),
 | |
|             'status' => true
 | |
|         ]);
 | |
|     }
 | |
|     // protected function saveFileToS3($file)
 | |
|     // {
 | |
|     //     $fileName = $this->createFilename($file);
 | |
| 
 | |
|     //     $disk = Storage::disk('s3');
 | |
|     //     // It's better to use streaming Streaming (laravel 5.4+)
 | |
|     //     $disk->putFileAs('photos', $file, $fileName);
 | |
| 
 | |
|     //     // for older laravel
 | |
|     //     // $disk->put($fileName, file_get_contents($file), 'public');
 | |
|     //     $mime = str_replace('/', '-', $file->getMimeType());
 | |
| 
 | |
|     //     // We need to delete the file when uploaded to s3
 | |
|     //     unlink($file->getPathname());
 | |
| 
 | |
|     //     return response()->json([
 | |
|     //         'path' => $disk->url($fileName),
 | |
|     //         'name' => $fileName,
 | |
|     //         'mime_type' => $mime
 | |
|     //     ]);
 | |
|     // }
 | |
|     protected function saveFile(UploadedFile $file, $resource)
 | |
|     {
 | |
|         $mime = str_replace('/', '-', $file->getMimeType());
 | |
|         $filePath = "upload/{$resource->uuid}";
 | |
|         $finalPath = storage_path("app/" . $filePath);
 | |
|         $file->move($finalPath, 'restore');
 | |
| 
 | |
|         return response()->json([
 | |
|             'mime_type' => $mime
 | |
|         ]);
 | |
|     }
 | |
|     protected function createFilename(UploadedFile $file)
 | |
|     {
 | |
|         $extension = $file->getClientOriginalExtension();
 | |
|         $filename = str_replace("." . $extension, "", $file->getClientOriginalName()); // Filename without extension
 | |
| 
 | |
|         $filename .= "_" . md5(time()) . "." . $extension;
 | |
| 
 | |
|         return $filename;
 | |
|     }
 | |
| }
 | 
