$keepAspect = array_key_exists('a', $_GET) ? true : false; $always = array_key_exists('forceIcon', $_GET) ? (bool) $_GET['forceIcon'] : true; if ($file === '') { //400 Bad Request \OC_Response::setStatus(400); \OC_Log::write('core-preview', 'No file parameter was passed', \OC_Log::DEBUG); exit; } if ($maxX === 0 || $maxY === 0) { //400 Bad Request \OC_Response::setStatus(400); \OC_Log::write('core-preview', 'x and/or y set to 0', \OC_Log::DEBUG); exit; } try { $preview = new \OC\Preview(\OC_User::getUser(), 'files'); $info = \OC\Files\Filesystem::getFileInfo($file); if (!$always and !$preview->isAvailable($info)) { \OC_Response::setStatus(404); } else { $preview->setFile($file); $preview->setMaxX($maxX); $preview->setMaxY($maxY); $preview->setScalingUp($scalingUp); $preview->setKeepAspect($keepAspect); } $preview->showPreview(); } catch (\Exception $e) { \OC_Response::setStatus(500); \OC_Log::write('core', $e->getmessage(), \OC_Log::DEBUG); }
$maxY = array_key_exists('y', $_GET) ? (int) $_GET['y'] : '44'; $scalingUp = array_key_exists('scalingup', $_GET) ? (bool) $_GET['scalingup'] : true; if ($file === '') { \OC_Response::setStatus(400); //400 Bad Request \OCP\Util::writeLog('core-preview', 'No file parameter was passed', \OCP\Util::DEBUG); exit; } if ($maxX === 0 || $maxY === 0) { \OC_Response::setStatus(400); //400 Bad Request \OCP\Util::writeLog('core-preview', 'x and/or y set to 0', \OCP\Util::DEBUG); exit; } try { $preview = new \OC\Preview(\OC_User::getUser(), 'files_trashbin/files', $file); $view = new \OC\Files\View('/' . \OC_User::getUser() . '/files_trashbin/files'); if ($view->is_dir($file)) { $mimetype = 'httpd/unix-directory'; } else { $pathInfo = pathinfo(ltrim($file, '/')); $fileName = $pathInfo['basename']; // if in root dir if ($pathInfo['dirname'] === '.') { // cut off the .d* suffix $i = strrpos($fileName, '.'); if ($i !== false) { $fileName = substr($fileName, 0, $i); } } $mimetype = \OC::$server->getMimeTypeDetector()->detectPath($fileName);
/** * return a preview of a file * * @param string $file The path to the file where you want a thumbnail from * @param int $maxX The maximum X size of the thumbnail. It can be smaller depending on the shape of the image * @param int $maxY The maximum Y size of the thumbnail. It can be smaller depending on the shape of the image * @param boolean $scaleUp Scale smaller images up to the thumbnail size or not. Might look ugly * @return \OCP\IImage */ public function createPreview($file, $maxX = 100, $maxY = 75, $scaleUp = false) { $preview = new \OC\Preview('', '/', $file, $maxX, $maxY, $scaleUp); return $preview->getPreview(); }
OCP\Util::addStyle('files_sharing', 'public'); OCP\Util::addStyle('files_sharing', 'mobile'); OCP\Util::addScript('files_sharing', 'public'); OCP\Util::addScript('files', 'fileactions'); OCP\Util::addScript('files', 'jquery.iframe-transport'); OCP\Util::addScript('files', 'jquery.fileupload'); // JS required for folders OCP\Util::addStyle('files', 'files'); OCP\Util::addStyle('files', 'upload'); OCP\Util::addScript('files', 'filesummary'); OCP\Util::addScript('files', 'breadcrumb'); OCP\Util::addScript('files', 'files'); OCP\Util::addScript('files', 'filelist'); OCP\Util::addscript('files', 'keyboardshortcuts'); $thumbSize = 1024; $previewSupported = OC\Preview::isMimeSupported($_['mimetype']) ? 'true' : 'false'; ?> <?php if (\OC\Preview::isMimeSupported($_['mimetype'])) { /* This enables preview images for links (e.g. on Facebook, Google+, ...)*/ ?> <link rel="image_src" href="<?php p(OCP\Util::linkToRoute('core_ajax_public_preview', array('x' => $thumbSize, 'y' => $thumbSize, 'file' => $_['directory_path'], 't' => $_['dirToken']))); ?> " /> <?php } ?> <div id="notification-container">
$root = \OC\Files\Filesystem::getPath($linkItem['file_source']) . '/'; $images = array_map(function ($image) use($root) { return $root . $image; }, $images); } else { $root = ''; OCP\JSON::checkLoggedIn(); $user = OCP\User::getUser(); } session_write_close(); $eventSource = new OC_EventSource(); foreach ($images as $image) { $height = 200 * $scale; if ($square) { $width = 200 * $scale; } else { $width = 400 * $scale; } $userView = new \OC\Files\View('/' . $user); $preview = new \OC\Preview($user, 'files', '/' . $image, $width, $height); $preview->setKeepAspect(!$square); $fileInfo = $userView->getFileInfo('/files/' . $image); // if the thumbnails is already cached, get it directly from the filesystem to avoid decoding and re-encoding the image $imageName = substr($image, strlen($root)); if ($path = $preview->isCached($fileInfo->getId())) { $eventSource->send('preview', array('image' => $imageName, 'preview' => base64_encode($userView->file_get_contents('/' . $path)))); } else { $eventSource->send('preview', array('image' => $imageName, 'preview' => (string) $preview->getPreview())); } } $eventSource->close();
public function testCreationFromCached() { $sampleFile = '/' . $this->user . '/files/test.txt'; $this->rootView->file_put_contents($sampleFile, 'dummy file data'); // create base preview $x = 150; $y = 150; $preview = new \OC\Preview($this->user, 'files/', 'test.txt', $x, $y); $preview->getPreview(); $fileInfo = $this->rootView->getFileInfo($sampleFile); $fileId = $fileInfo['fileid']; $thumbCacheFile = '/' . $this->user . '/' . \OC\Preview::THUMBNAILS_FOLDER . '/' . $fileId . '/' . $x . '-' . $y . '.png'; $this->assertEquals($this->rootView->file_exists($thumbCacheFile), true); // create smaller previews $preview = new \OC\Preview($this->user, 'files/', 'test.txt', 50, 50); $isCached = $preview->isCached($fileId); $this->assertEquals($this->user . '/' . \OC\Preview::THUMBNAILS_FOLDER . '/' . $fileId . '/150-150.png', $isCached); }
/** * Initialises the preview * * @param int $width * @param int $height * * @return \OC\Preview */ private function createPreview($width, $height) { $preview = new \OC\Preview(self::TEST_PREVIEW_USER1, 'files/', $this->sampleFilename, $width, $height); $this->assertSame(true, $preview->isFileValid()); $preview->setKeepAspect($this->keepAspect); $preview->setScalingup($this->scalingUp); return $preview; }
exit; } $sharedFile = \OC\Files\Filesystem::normalizePath($file); } if ($linkedItem['item_type'] === 'file') { $parent = $pathInfo['parent']; $path = $view->getPath($parent); $sharedFile = $pathInfo['name']; } $path = \OC\Files\Filesystem::normalizePath($path, false); if (substr($path, 0, 1) === '/') { $path = substr($path, 1); } if ($maxX === 0 || $maxY === 0) { \OC_Response::setStatus(400); //400 Bad Request \OC_Log::write('core-preview', 'x and/or y set to 0', \OC_Log::DEBUG); exit; } $root = 'files/' . $path; try { $preview = new \OC\Preview($userId, $root); $preview->setFile($sharedFile); $preview->setMaxX($maxX); $preview->setMaxY($maxY); $preview->setScalingUp($scalingUp); $preview->show(); } catch (\Exception $e) { \OC_Response::setStatus(500); \OC_Log::write('core', $e->getmessage(), \OC_Log::DEBUG); }
public function testIsCached() { $sourceFile = __DIR__ . '/../data/testimage.png'; $userId = $this->getUniqueID(); $this->createUser($userId, 'pass'); $storage = new Temporary(); $storage->mkdir('files'); $this->registerMount($userId, $storage, '/' . $userId); \OC_Util::tearDownFS(); \OC_Util::setupFS($userId); $preview = new \OC\Preview($userId, 'files'); $view = new View('/' . $userId . '/files'); $view->file_put_contents('test.png', file_get_contents($sourceFile)); $info = $view->getFileInfo('test.png'); $preview->setFile('test.png', $info); $preview->setMaxX(64); $preview->setMaxY(64); $this->assertFalse($preview->isCached($info->getId())); $preview->getPreview(); $this->assertEquals('thumbnails/' . $info->getId() . '/64-64.png', $preview->isCached($info->getId())); }
$maxX = array_key_exists('x', $_GET) ? (int) $_GET['x'] : '32'; $maxY = array_key_exists('y', $_GET) ? (int) $_GET['y'] : '32'; $scalingUp = array_key_exists('scalingup', $_GET) ? (bool) $_GET['scalingup'] : true; $keepAspect = array_key_exists('a', $_GET) ? true : false; $always = array_key_exists('forceIcon', $_GET) ? (bool) $_GET['forceIcon'] : true; $mode = array_key_exists('mode', $_GET) ? $_GET['mode'] : 'fill'; if ($file === '') { //400 Bad Request \OC_Response::setStatus(400); \OCP\Util::writeLog('core-preview', 'No file parameter was passed', \OCP\Util::DEBUG); exit; } if ($maxX === 0 || $maxY === 0) { //400 Bad Request \OC_Response::setStatus(400); \OCP\Util::writeLog('core-preview', 'x and/or y set to 0', \OCP\Util::DEBUG); exit; } $info = \OC\Files\Filesystem::getFileInfo($file); if (!$info instanceof OCP\Files\FileInfo || !$always && !\OC::$server->getPreviewManager()->isAvailable($info)) { \OC_Response::setStatus(404); } else { $preview = new \OC\Preview(\OC_User::getUser(), 'files'); $preview->setFile($file, $info); $preview->setMaxX($maxX); $preview->setMaxY($maxY); $preview->setScalingUp($scalingUp); $preview->setMode($mode); $preview->setKeepAspect($keepAspect); $preview->showPreview(); }
$img = $_GET['file']; if (!empty($_GET['token'])) { $linkItem = \OCP\Share::getShareByToken($_GET['token']); if (!(is_array($linkItem) && isset($linkItem['uid_owner']))) { exit; } // seems to be a valid share $rootLinkItem = \OCP\Share::resolveReShare($linkItem); $user = $rootLinkItem['uid_owner']; // Setup filesystem OCP\JSON::checkUserExists($user); OC_Util::tearDownFS(); OC_Util::setupFS($user); $fullPath = \OC\Files\Filesystem::getPath($linkItem['file_source']); if ($fullPath === null) { exit; } $img = trim($fullPath . '/' . $img); } else { OCP\JSON::checkLoggedIn(); $user = OCP\User::getUser(); } session_write_close(); $square = isset($_GET['square']) ? (bool) $_GET['square'] : false; if ($square) { $preview = new \OC\Preview($user, 'files', '/' . $img, 200 * $scale, 200 * $scale); } else { $preview = new \OC\Preview($user, 'files', '/' . $img, 400 * $scale, 200 * $scale); $preview->setKeepAspect(true); } $preview->showPreview();
if ($file === '') { //400 Bad Request \OC_Response::setStatus(400); \OC_Log::write('core-preview', 'No file parameter was passed', \OC_Log::DEBUG); exit; } if ($maxX === 0 || $maxY === 0) { //400 Bad Request \OC_Response::setStatus(400); \OC_Log::write('core-preview', 'x and/or y set to 0', \OC_Log::DEBUG); exit; } try { $preview = new \OC\Preview(\OC_User::getUser(), 'files'); if (!$always and !$preview->isMimeSupported(\OC\Files\Filesystem::getMimeType($file))) { \OC_Response::setStatus(404); } else { $preview->setFile($file); $preview->setMaxX($maxX); $preview->setMaxY($maxY); $preview->setScalingUp($scalingUp); $preview->setKeepAspect($keepAspect); } $preview->showPreview(); } catch (\Exception $e) { \OC_Response::setStatus(500); \OC_Log::write('core', $e->getmessage(), \OC_Log::DEBUG); }
\OC::$server->getSession()->close(); $file = array_key_exists('file', $_GET) ? (string) $_GET['file'] : ''; $maxX = array_key_exists('x', $_GET) ? (int) $_GET['x'] : '36'; $maxY = array_key_exists('y', $_GET) ? (int) $_GET['y'] : '36'; $scalingUp = array_key_exists('scalingup', $_GET) ? (bool) $_GET['scalingup'] : true; $keepAspect = array_key_exists('a', $_GET) ? true : false; $always = array_key_exists('forceIcon', $_GET) ? (bool) $_GET['forceIcon'] : true; if ($file === '') { //400 Bad Request \OC_Response::setStatus(400); \OC_Log::write('core-preview', 'No file parameter was passed', \OC_Log::DEBUG); exit; } if ($maxX === 0 || $maxY === 0) { //400 Bad Request \OC_Response::setStatus(400); \OC_Log::write('core-preview', 'x and/or y set to 0', \OC_Log::DEBUG); exit; } $preview = new \OC\Preview(\OC_User::getUser(), 'files'); $info = \OC\Files\Filesystem::getFileInfo($file); if (!$info instanceof OCP\Files\FileInfo || !$always && !$preview->isAvailable($info)) { \OC_Response::setStatus(404); } else { $preview->setFile($file); $preview->setMaxX($maxX); $preview->setMaxY($maxY); $preview->setScalingUp($scalingUp); $preview->setKeepAspect($keepAspect); $preview->showPreview(); }
exit; } $sharedFile = \OC\Files\Filesystem::normalizePath($file); } if ($linkedItem['item_type'] === 'file') { $parent = $pathInfo['parent']; $path = $view->getPath($parent); $sharedFile = $pathInfo['name']; } $path = \OC\Files\Filesystem::normalizePath($path, false); if (substr($path, 0, 1) === '/') { $path = substr($path, 1); } if ($maxX === 0 || $maxY === 0) { \OC_Response::setStatus(\OC_Response::STATUS_BAD_REQUEST); \OCP\Util::writeLog('core-preview', 'x and/or y set to 0', \OCP\Util::DEBUG); exit; } $root = 'files/' . $path; try { $preview = new \OC\Preview($userId, $root); $preview->setFile($sharedFile); $preview->setMaxX($maxX); $preview->setMaxY($maxY); $preview->setScalingUp($scalingUp); $preview->setKeepAspect($keepAspect); $preview->showPreview(); } catch (\Exception $e) { \OC_Response::setStatus(\OC_Response::STATUS_INTERNAL_SERVER_ERROR); \OCP\Util::writeLog('core', $e->getmessage(), \OCP\Util::DEBUG); }
public function testKeepAspectRatioCover() { $originalWidth = 1680; $originalHeight = 1050; $originalAspectRation = $originalWidth / $originalHeight; $preview = new \OC\Preview(self::TEST_PREVIEW_USER1, 'files/', 'testimage.jpg', 150, 150); $preview->setKeepAspect(true); $preview->setMode(\OC\Preview::MODE_COVER); $image = $preview->getPreview(); $aspectRatio = $image->width() / $image->height(); $this->assertEquals(round($originalAspectRation, 2), round($aspectRatio, 2)); $this->assertGreaterThanOrEqual(150, $image->width()); $this->assertGreaterThanOrEqual(150, $image->height()); }
public static function prepare_delete($args, $prefix = '') { $path = $args['path']; if (substr($path, 0, 1) === '/') { $path = substr($path, 1); } $view = new \OC\Files\View('/' . \OC_User::getUser() . '/' . $prefix); $info = $view->getFileInfo($path); \OC\Preview::$deleteFileMapper = array_merge(\OC\Preview::$deleteFileMapper, array(Files\Filesystem::normalizePath($view->getAbsolutePath($path)) => $info)); }
/** * @brief offer preview for download * * if no preview exists for this file, send icon instead * * @param string $path full path to file * @param string type type of preview requested */ public static function servePreview($path, $type) { \OCP\User::checkLoggedIn(); \OC::$server->getSession()->close(); $i = \OC\Files\Filesystem::getFileInfo($path, false); /* check for predefined cover, if found replace $path with that of cover file */ $meta = Meta::get($i['fileid']); if ($meta['cover']) { $path = pathinfo($path)['dirname'] . '/' . $meta['cover']; $i = \OC\Files\Filesystem::getFileInfo($path, false); } if (\OC::$server->getPreviewManager()->isMimeSupported($i['mimetype'])) { $preview = new \OC\Preview(\OC_User::getUser(), 'files'); $preview->setFile($path); switch ($type) { case 'cover': $preview->setMaxX(Config::getApp('cover-x', '200')); $preview->setMaxY(Config::getApp('cover-y', '200')); break; case 'thumbnail': $preview->setMaxX(Config::getApp('thumb-x', '36')); $preview->setMaxY(Config::getApp('thumb-y', '36')); break; } $preview->showPreview(); } else { // no preview, serve icon instead $scheme = !empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443 ? 'https' : 'http'; header("Location: " . $scheme . "://" . $_SERVER['HTTP_HOST'] . \OC_Helper::mimetypeIcon($i->getMimeType())); /* Note: relative URL should be enough (RFC7231) but some OPDS clients * (especially those in dedicated book readers) might not support them * * header("Location: " . \OC_Helper::mimetypeIcon($i->getMimeType())); */ } }