Exemple #1
0
 /**
  * Save/Upload file with auto-dectection of file type
  *
  * @author Casper Rasmussen <*****@*****.**>
  *
  * @access public
  * @param  mixed                              $file
  * @param  string|null                        $folder
  * @param  \Nodes\Assets\Upload\Settings|null $settings
  * @return null|string
  * @throws \Nodes\Assets\Upload\Exceptions\AssetsBadRequestException
  * @throws \Nodes\Assets\Upload\Exceptions\AssetsUploadFailedException
  */
 public function add($file, $folder = null, UploadSettings $settings = null)
 {
     // Make sure we actually have data to work with
     if (empty($file)) {
         return null;
     }
     // Determine what kind of save/upload method
     // we should use to process this file
     if (filter_var($file, FILTER_VALIDATE_URL)) {
         return $this->addFromUrl($file, $folder, $settings);
     } elseif (is_string($file) && DataUri::isParsable($file)) {
         return $this->addFromDataUri($file, $folder, $settings);
     } else {
         if ($file instanceof UploadedFile) {
             return $this->addFromUploadedFile($file, $folder, $settings);
         } else {
             throw (new AssetsBadRequestException('Uploaded file/string type is not supported'))->setStatusCode(400);
         }
     }
 }
 /**
  * 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);
 }