Exemplo n.º 1
0
 /**
  * addFromDataUri.
  *
  * @author Casper Rasmussen <*****@*****.**>
  *
  * @param string                        $dataUri
  * @param string                        $folder
  * @param \Nodes\Assets\Upload\Settings $settings
  *
  * @return string
  * @throws \Nodes\Assets\Upload\Exceptions\AssetsBadRequestException
  */
 public function addFromDataUri($dataUri, $folder, Settings $settings)
 {
     // Data URI container
     $dataUriObject = null;
     // Try and parse data URI to our container
     if (!DataUri::tryParse($dataUri, $dataUriObject)) {
         throw (new AssetsBadRequestException('Could not stream the content'))->setStatusCode(400);
     }
     // Retrieve the data
     $content = $dataUriObject->getEncodedData();
     // Write parsed content to temp. file
     $file = tempnam('/tmp', '');
     file_put_contents($file, base64_decode($content));
     // File's mime-type
     $mimeType = (new finfo(FILEINFO_MIME))->file($file);
     // Generate an UploadedFile object
     $uploadedFile = new UploadedFile($file, Str::random(10) . '.' . $dataUriObject->getFileExtension(), $mimeType, filesize($file));
     // Set folder
     if (!$settings->hasFolder()) {
         $settings->setFolder($folder);
     }
     // Generate filename
     if (!$settings->hasFilename()) {
         $settings->setFileName($this->generateFilename($uploadedFile));
     }
     // Generate file extension
     if (!$settings->hasFileExtension()) {
         $settings->setFileExtension($this->generateFileExtension($uploadedFile));
     }
     // Throw exception if required data is missing
     $settings->checkRequiredData();
     // Process file
     return $this->store($uploadedFile, $settings);
 }