ldc-dam/app/Http/Controllers/UploadController.php

197 lines
5.6 KiB
PHP
Raw Normal View History

2019-05-29 14:05:54 +02:00
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Storage;
use Illuminate\Http\Request;
use App\Media;
use App\Http\Traits\MediaTools;
class UploadController extends Controller {
use MediaTools;
public function index()
{
return view('upload.show');
}
public function storeMedia(Request $request)
{
$uid = $request->input('uid');
$sujet_id = $request->input('sujet_id');
$dossier_id = $request->input('dossier_id');
if($dossier_id == 0) $dossier_id = null;
$headers = $request->headers->all();
$acceptFileTypes = array('gif','jpeg', 'jpg','png','mp4','mp3','psd','ai','eps','svg','indd','pdf');
if ($request->hasFile('files')) {
$file = $request->file('files');
foreach($file as $files){
$is_last_chunk = false;
$is_chunked_upload = !empty($headers['content-range']);
if ($is_chunked_upload) {
if (preg_match('|(\d+)/(\d+)|', $headers['content-range'][0], $range)) {
if ($range[1] == $range[2] - 1) {
$is_last_chunk = true;
}
}
}
$extension = strtolower($files->getClientOriginalExtension());
if (!in_array($extension, $acceptFileTypes)) return array("false");
if($is_chunked_upload){
$filename = $uid."_".$range[1].".".$extension;
}else{
$filename = $uid.'.'.$extension;
}
$uploadPath = public_path() . '/uploads/';
$files->move($uploadPath, $filename);
// si c'est le dernier morceux d'un fichier
if($is_last_chunk){
if($dossier = opendir($uploadPath)){
$dirFiles = array();
// on compile tous les chunk du fichier
while(false !== ($fichier = readdir($dossier))){
if($fichier != '.' && $fichier != '..' ){
if(strpos($fichier,$uid) !== false){
$dirFiles[$fichier] = str_replace(".".$extension, "", str_replace($uid."_", "", $fichier));
}
}
}
closedir($dossier);
// on les trie pour les assembler dans le bon ordre
asort ($dirFiles, SORT_NUMERIC );
// on les assemble dans un fichier final
$filename = $uid . '.' . $extension;
foreach($dirFiles as $key => $fichier) {
$file = fopen($uploadPath.$key, 'rb');
$buff = fread($file, filesize($uploadPath.$key));
fclose($file);
$final = fopen($uploadPath.$filename, 'a');
$write = fwrite($final, $buff);
fclose($final);
unlink($uploadPath.$key);
}
}
}
// si c'est le dernier morceau d'un fichier ou que c'est un envoi simple
if($is_last_chunk || !$is_chunked_upload ){
// On déplace le fichier dans le répertoire des médias
$destinationPath = $this->get_mediaFolder()."/";
Storage::move("uploads/".$filename, $destinationPath.$filename);
// on créé un média en bdd
$media = new Media();
$media->libelle = $filename;
$media->extension = $extension;
$media->source = $destinationPath.$filename;
$media->taille = $this->formatBytes($this->get_file_size($destinationPath.$filename));
switch ($extension) {
// Photo (1)
case 'gif':
case 'jpeg':
case 'jpg':
case 'png':
$media->typemedia_id = 1;
list($width, $height) = getimagesize($destinationPath.$filename);
$media->largeur = $width;
$media->hauteur = $height;
$media->resolution = $this->get_dpi($destinationPath.$filename);
$this->createThumbnail($destinationPath.$filename, $destinationPath.$uid.'_thumb.'.$extension, 200);
2019-06-05 09:10:06 +02:00
if($width >= 1500){
$this->createThumbnail($destinationPath.$filename, $destinationPath.$uid.'_preview.'.$extension, 1500);
}else{
$this->createThumbnail($destinationPath.$filename, $destinationPath.$uid.'_preview.'.$extension, $width);
}
2019-05-29 14:05:54 +02:00
break;
// Illustration/Vectorielle (2)
case 'svg':
$media->typemedia_id = 2;
break;
// Vidéo (3)
case 'mp4':
$media->typemedia_id =3 ;
$getID3 = new \getID3;
if($fileInfo = $getID3->analyze($destinationPath.$filename)){
$media->largeur = $fileInfo['video']['resolution_x'];
$media->hauteur = $fileInfo['video']['resolution_y'];
$media->duree = $fileInfo['playtime_string'];
}
break;
// Audio (4)
case 'mp3':
$media->typemedia_id = 4;
$getID3 = new \getID3;
if($fileInfo = $getID3->analyze($destinationPath.$filename)){
$media->duree= $fileInfo['playtime_string'];
}
break;
// Document (5)
2019-06-05 09:10:06 +02:00
case 'ai':
2019-05-29 14:05:54 +02:00
case 'eps':
case 'indd':
case 'pdf':
case 'psd':
default:
$media->typemedia_id = 5;
2019-06-05 16:03:25 +02:00
if($extension == 'pdf'){
$im = new \imagick();
$im->readImage($destinationPath.$filename.'[0]');
$im->setImageFormat('jpg');
$imageprops = $im->getImageGeometry();
$width = $imageprops['width'];
$height = $imageprops['height'];
// create preview
$fp = $destinationPath.$uid.'_preview.jpg';
if($width >= 1500){
$newHeight = (1500 * $height) / $width;
$im->resizeImage(1500,$newHeight, \imagick::FILTER_LANCZOS, 0.9, true);
}
$im->writeImage($fp);
// create thumb
$newHeight = (200 * $height) / $width;
$im->resizeImage(200, $newHeight, \imagick::FILTER_LANCZOS, 0.9, true);
$fp = $destinationPath.$uid.'_thumb.jpg';
$im->writeImage($fp);
}
2019-05-29 14:05:54 +02:00
break;
}
$media->dossier_id = $dossier_id;
$media->sujet_id = $sujet_id;
$media->save();
}
$filest = array();
$filest['name'] = $filename;
$filest['uid'] = $uid;
$filesa['files'][]=$filest;
}
return $filesa;
}
}
}