Example #1
0
 public function indexAction()
 {
     $messages = array();
     $form = new BootstrapForm('bootstrap');
     if ($this->request->isPost()) {
         $post = $this->request->getPost();
         $form->setData($post);
         $messages[] = _a('Form submitted successfully.');
         //$rename = 'demo_for_upload_%random%';
         $rename = function ($name) {
             //$extension = pathinfo($name, PATHINFO_EXTENSION);
             $name = 'test_for_upload_' . $name;
             return $name;
         };
         $uploader = new Upload(array('rename' => $rename));
         $uploader->setExtension('jpg,png,gif,txt,zip,rar');
         //->setRename('tmp.%random%');
         //->setImageSize(array('maxWidth' => 600, 'maxHeight' => 500));
         if ($uploader->isValid()) {
             $uploader->receive();
             $file = $uploader->getUploaded('upload_demo');
             $messages[] = sprintf(_a('File uploaded and saved as %s'), $file);
         }
     }
     $this->view()->assign(array('form' => $form, 'messages' => $messages));
 }
Example #2
0
 /**
  * Process upload image by AJAX 
  */
 public function uploadAction()
 {
     $module = $this->getModule();
     $config = Pi::user()->config('');
     $result = array('status' => false);
     $fakeId = $this->params('fake_id', 0);
     // Checking whether ID is empty
     if (empty($fakeId)) {
         $result['message'] = __('Invalid token!');
         return $result;
     }
     $rawInfo = $this->request->getFiles('upload');
     // Rename
     $ext = strtolower(pathinfo($rawInfo['name'], PATHINFO_EXTENSION));
     $rename = $fakeId . '.' . $ext;
     // Get path to store
     $location = $this->config('path_tmp') ?: sprintf('upload/%s/tmp', $this->getModule());
     //$destination = Pi::path($location);
     $uploadConfig = Pi::service('avatar')->getOption('upload');
     $extension = implode(',', $uploadConfig['extension']);
     $maxFile = $config['max_size'] ? $config['max_size'] * 1024 : 0;
     $maxSize = array();
     if ($config['max_avatar_width']) {
         $maxSize['width'] = (int) $config['max_avatar_width'];
     }
     if ($config['max_avatar_height']) {
         $maxSize['height'] = (int) $config['max_avatar_height'];
     }
     $upload = new UploadHandler();
     $upload->setDestination($location)->setRename($rename)->setExtension($extension);
     if ($maxFile) {
         $upload->setSize($maxFile);
     }
     if ($maxSize) {
         $upload->setImageSize($maxSize);
     }
     // Get raw file name
     if (empty($rawInfo)) {
         $content = $this->request->getContent();
         preg_match('/filename="(.+)"/', $content, $matches);
         $rawName = $matches[1];
     } else {
         $rawName = null;
     }
     // Checking whether uploaded file is valid
     if (!$upload->isValid($rawName)) {
         $result['message'] = implode(', ', $upload->getMessages());
         return $result;
     }
     $upload->receive();
     //$fileName = $upload->getDestination() . '/' . $rename;
     $fileName = $location . '/' . $upload->getUploaded();
     // Resolve allowed image extension
     $imageSize = array();
     $imageSizeRaw = getimagesize(Pi::path($fileName));
     $imageSize['w'] = $imageSizeRaw[0];
     $imageSize['h'] = $imageSizeRaw[1];
     $uploadInfo = array('tmp_name' => $fileName, 'w' => $imageSize['w'], 'h' => $imageSize['h']);
     // Save info to session
     $session = $this->getUploadSession($module, 'avatar');
     $session->{$fakeId} = $uploadInfo;
     // Prepare return data
     $result['data'] = array_merge(array('originalName' => $rawInfo['name'], 'size' => $rawInfo['size'], 'preview_url' => Pi::url($fileName), 'basename' => basename($fileName), 'type' => $ext, 'id' => $fakeId, 'filename' => $fileName), $imageSize);
     $result['status'] = true;
     //return $result; for ie10+ bug
     Pi::service('log')->mute();
     echo json_encode($result);
     exit;
 }
Example #3
0
 public function uploadAction()
 {
     //Pi::service('log')->mute();
     $return = array('status' => 1, 'message' => '', 'image' => '');
     $rename = $this->tmpPrefix . '%random%';
     /**#@+
      * Just for demo for anonymous callback
      */
     /*
     $rename = function ($name)
     {
         $pos = strrpos($name, '.');
         if (false !== $pos) {
             $extension = substr($name, $pos);
             $name = substr($name, 0, $pos);
         } else {
             $extension = '';
         }
         $newName = $name . '.random-' .uniqid() . '.' . $extension;
         return $newName;
     };
     */
     /**#@-*/
     $uploader = new Upload(array('rename' => $rename));
     $uploader->setExtension('jpg,png,gif');
     //->setRename('tmp.%random%');
     //->setImageSize(array('maxWidth' => 600, 'maxHeight' => 500));
     if ($uploader->isValid()) {
         $uploader->receive();
         $file = $uploader->getUploaded('image');
         $return['image'] = $file;
     } else {
         $messages = $uploader->getMessages();
         $return = array('status' => 0, 'message' => implode('; ', $messages));
     }
     return $return;
 }
Example #4
0
 /**
  * Upload a doc and save meta
  *
  * @TODO not completed
  *
  * @param array  $params
  * @param string $method
  *
  * @return int doc id
  */
 public function upload(array $params, $method = 'POST')
 {
     @ignore_user_abort(true);
     @set_time_limit(0);
     $options = Pi::service('media')->getOption('local', 'options');
     $rootUri = $options['root_uri'];
     $rootPath = $options['root_path'];
     $path = $options['locator']['path'];
     if ($path instanceof Closure) {
         $relativePath = $path();
     } else {
         $relativePath = $path;
     }
     $destination = $rootPath . '/' . $relativePath;
     Pi::service('file')->mkdir($destination);
     $rename = $options['locator']['file'];
     $success = false;
     switch (strtoupper($method)) {
         // For remote post
         case 'POST':
             $uploader = new Upload(array('destination' => $destination, 'rename' => $rename($params['filename'])));
             $maxSize = Pi::config('max_size', $this->module);
             if ($maxSize) {
                 $uploader->setSize($maxSize * 1024);
             }
             $result = $uploader->isValid();
             if ($result) {
                 $uploader->receive();
                 $filename = $uploader->getUploaded();
                 if (is_array($filename)) {
                     $filename = current($filename);
                 }
                 // Fetch file attributes
                 $fileinfoList = $uploader->getFileInfo();
                 $fileinfo = current($fileinfoList);
                 if (!isset($params['mimetype'])) {
                     $params['mimetype'] = $fileinfo['type'];
                 }
                 if (!isset($params['size'])) {
                     $params['size'] = $fileinfo['size'];
                 }
                 $success = true;
             }
             break;
             // For remote put
         // For remote put
         case 'PUT':
             $putdata = fopen('php://input', 'r');
             $filename = $rename($params['filename']);
             $target = $destination . '/' . $filename;
             $fp = fopen($target, 'w');
             while ($data = fread($putdata, 1024)) {
                 fwrite($fp, $data);
             }
             fclose($fp);
             fclose($putdata);
             $success = true;
             break;
             // For local
         // For local
         case 'MOVE':
             $filename = $rename($params['filename']);
             $target = $destination . '/' . $filename;
             Pi::service('file')->copy($params['file'], $target);
             unset($params['file']);
             $success = true;
             break;
         default:
             break;
     }
     if ($success) {
         $params['url'] = $rootUri . '/' . $relativePath . '/' . $filename;
         $params['path'] = $rootPath . '/' . $relativePath . '/' . $filename;
         $result = $this->add($params);
     } else {
         $result = 0;
     }
     return $result;
 }