久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

如何將 Blue Imp 文件上傳集成到 CakePHP?

How to Integrate Blue Imp File Upload to CakePHP?(如何將 Blue Imp 文件上傳集成到 CakePHP?)
本文介紹了如何將 Blue Imp 文件上傳集成到 CakePHP?的處理方法,對(duì)大家解決問題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧!

問題描述

Wa 正在使用 CakePHP,需要集成 Blue Imp 文件上傳庫.有沒有人成功集成這些?如果是這樣,您是否設(shè)置了上傳以將文件存儲(chǔ)在數(shù)據(jù)庫或文件系統(tǒng)上?您能否分享此類集成的示例?

非常感謝您的幫助和指導(dǎo).

解決方案

是的,我在 php 中集成了 BlueImp 文件上傳功能.請(qǐng)找到以下組件和要使用的元素.

options = array('script_url' =>$this->getFullUrl().'/','上傳目錄' =>目錄名($_SERVER['SCRIPT_FILENAME']).'/attachments/files/','upload_url' =>$this->getFullUrl().'/files/','param_name' =>'文件',//將以下選項(xiàng)設(shè)置為POST",如果您的服務(wù)器不支持//刪除請(qǐng)求.這是發(fā)送給客戶端的參數(shù):'delete_type' =>'郵政',//php.ini 設(shè)置upload_max_filesize 和post_max_size//優(yōu)先于以下 max_file_size 設(shè)置:'max_file_size' =>空值,'min_file_size' =>1、'accept_file_types' =>'/.+$/i','max_number_of_files' =>空值,//將以下選項(xiàng)設(shè)置為 false 以啟用可恢復(fù)上傳:'discard_aborted_uploads' =>真的,//設(shè)置為 true 以根據(jù) EXIF 元數(shù)據(jù)旋轉(zhuǎn)圖像(如果可用):'orient_image' =>錯(cuò)誤的,'image_versions' =>大批(//取消注釋以下版本以限制大小//上傳的圖片.您還可以添加其他版本//自己的上傳目錄:/*'大' =>大批('上傳目錄' =>目錄名($_SERVER['SCRIPT_FILENAME']).'/files/','upload_url' =>$this->getFullUrl().'/files/','max_width' =>1920年,'max_height' =>1200,'jpeg_quality' =>95),*/'縮略圖' =>大批('上傳目錄' =>dirname($_SERVER['SCRIPT_FILENAME']).'/attachments/thumbnails/','upload_url' =>$this->getFullUrl().'/attachments/thumbnails/','max_width' =>80,'max_height' =>80)));如果(is_array($options)){$this->options = array_replace_recursive($this->options, $options);}}受保護(hù)的函數(shù) getFullUrl() {返回(isset($_SERVER['HTTPS']) ? 'https://' : 'http://').(isset($_SERVER['REMOTE_USER']) ? $_SERVER['REMOTE_USER'].'@' : '').(isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : ($_SERVER['SERVER_NAME'].(isset($_SERVER['HTTPS']) && $_SERVER['SERVER_PORT'] === 443 ||$_SERVER['SERVER_PORT'] === 80 ?'' : ':'.$_SERVER['SERVER_PORT']))).substr($_SERVER['SCRIPT_NAME'],0, strrpos($_SERVER['SCRIPT_NAME'], '/'));}受保護(hù)的函數(shù) set_file_delete_url($file) {$file->delete_url = $this->options['script_url'].'?file='.rawurlencode($file->name);$file->delete_type = $this->options['delete_type'];如果 ($file->delete_type !== 'DELETE') {$file->delete_url .= '&_method=DELETE';}}受保護(hù)的函數(shù) get_file_object($file_name) {$file_path = $this->options['upload_dir'].$file_name;如果 (is_file($file_path) && $file_name[0] !== '.') {$file = new stdClass();$file->name = $file_name;$file->size = 文件大小($file_path);$file->url = $this->options['upload_url'].rawurlencode($file->name);foreach($this->options['image_versions'] as $version => $options) {如果 (is_file($options['upload_dir'].$file_name)) {$file->{$version.'_url'} = $options['upload_url'].rawurlencode($file->name);}}$this->set_file_delete_url($file);返回 $ 文件;}返回空;}受保護(hù)的函數(shù) get_file_objects() {返回?cái)?shù)組值(數(shù)組過濾器(數(shù)組映射(數(shù)組($this, 'get_file_object'),scandir($this->options['upload_dir']))));}受保護(hù)的函數(shù) create_scaled_image($file_name, $options) {$file_path = $this->options['upload_dir'].$file_name;$new_file_path = $options['upload_dir'].$file_name;列表($img_width, $img_height) = @getimagesize($file_path);如果 (!$img_width || !$img_height) {返回假;}$規(guī)模=分鐘($options['max_width']/$img_width,$options['max_height']/$img_height);如果 ($scale >= 1) {如果($file_path !== $new_file_path){返回副本($file_path,$new_file_path);}返回真;}$new_width = $img_width * $scale;$new_height = $img_height * $scale;$new_img = @imagecreatetruecolor($new_width, $new_height);開關(guān) (strtolower(substr(strrchr($file_name, '.'), 1))) {案例'jpg':案例'jpeg':$src_img = @imagecreatefromjpeg($file_path);$write_image = 'imagejpeg';$image_quality = isset($options['jpeg_quality']) ?$options['jpeg_quality'] : 75;休息;案例'gif':@imagecolortransparent($new_img, @imagecolorallocate($new_img, 0, 0, 0));$src_img = @imagecreatefromgif ($file_path);$write_image = 'imagegif';$image_quality = null;休息;案例'png':@imagecolortransparent($new_img, @imagecolorallocate($new_img, 0, 0, 0));@imagealphablending($new_img, false);@imagesavealpha($new_img, true);$src_img = @imagecreatefrompng($file_path);$write_image = 'imagepng';$image_quality = isset($options['png_quality']) ?$options['png_quality'] : 9;休息;默認(rèn):$src_img = null;}$success = $src_img &&@imagecopyresampled($new_img,$src_img,0, 0, 0, 0,$new_width,$新高度,$img_width,$img_height) &&$write_image($new_img, $new_file_path, $image_quality);//釋放內(nèi)存(imagedestroy 不刪除文件):@imagedestroy($src_img);@imagedestroy($new_img);返回 $success;}受保護(hù)的函數(shù) has_error($uploaded_file, $file, $error) {如果($錯(cuò)誤){返回$錯(cuò)誤;}if (!preg_match($this->options['accept_file_types'], $file->name)) {返回接受文件類型";}如果 ($uploaded_file && is_uploaded_file($uploaded_file)) {$file_size = 文件大小($uploaded_file);} 別的 {$file_size = $_SERVER['CONTENT_LENGTH'];}如果 ($this->options['max_file_size'] && ($file_size >$this->options['max_file_size'] ||$文件->大小>$this->options['max_file_size'])){返回最大文件大小";}if ($this->options['min_file_size'] &&$file_size <$this->options['min_file_size']) {返回 '??minFileSize';}如果 (is_int($this->options['max_number_of_files']) && (count($this->get_file_objects())>= $this->options['max_number_of_files'])){返回 '??maxNumberOfFiles';}返回$錯(cuò)誤;}受保護(hù)的函數(shù) upcount_name_callback($matches) {$index = isset($matches[1]) ?intval($matches[1]) + 1 : 1;$ext = isset($matches[2]) ?$matches[2] : '';返回 '?? ('.$index.')'.$ext;}受保護(hù)的函數(shù) upcount_name($name) {返回 preg_replace_callback('/(?:(?: (([d]+)))?(.[^.]+))?$/',數(shù)組($this,'upcount_name_callback'),$姓名,1);}受保護(hù)的函數(shù)trim_file_name($name, $type) {//刪除路徑信息和文件名周圍的點(diǎn),以防止上傳//進(jìn)入不同的目錄或替換隱藏的系統(tǒng)文件.//同時(shí)刪除文件名周圍的控制字符和空格 (x00..x20):$file_name = trim(basename(stripslashes($name)), ".x00..x20");//為已知圖像類型添加缺少的文件擴(kuò)展名:if (strpos($file_name, '.') === false &&preg_match('/^image/(gif|jpe?g|png)/', $type, $matches)) {$file_name .= '.'.$matches[1];}如果 ($this->options['discard_aborted_uploads']) {while(is_file($this->options['upload_dir'].$file_name)) {$file_name = $this->upcount_name($file_name);}}返回 $file_name;}受保護(hù)的函數(shù) orient_image($file_path) {$exif = exif_read_data($file_path);$orientation = intval(@$exif['Orientation']);if (!in_array($orientation, array(3, 6, 8))) {返回假;}$image = @imagecreatefromjpeg($file_path);開關(guān)($方向){案例3:$image = @imagerotate($image, 180, 0);休息;案例6:$image = @imagerotate($image, 270, 0);休息;案例8:$image = @imagerotate($image, 90, 0);休息;默認(rèn):返回假;}$success = imagejpeg($image, $file_path);//釋放內(nèi)存(imagedestroy 不刪除文件):@imagedestroy($image);返回 $success;}受保護(hù)的函數(shù) handle_file_upload($uploaded_file, $name, $size, $type, $error) {$file = new stdClass();$file->name = $this->trim_file_name($name, $type);$file->size = intval($size);$file->type = $type;$error = $this->has_error($uploaded_file, $file, $error);if (!$error && $file->name) {$file_path = $this->options['upload_dir'].$file->name;$append_file = !$this->options['discard_aborted_uploads'] &&is_file($file_path) &&$文件->大小>文件大小($file_path);clearstatcache();如果 ($uploaded_file && is_uploaded_file($uploaded_file)) {//multipart/formdata 上傳(POST 方法上傳)如果($append_file){file_put_contents($file_path,fopen($uploaded_file, 'r'),FILE_APPEND);} 別的 {move_uploaded_file($uploaded_file, $file_path);}} 別的 {//非分段上傳(PUT 方法支持)file_put_contents($file_path,fopen('php://input', 'r'),$append_file ?FILE_APPEND : 0);}$file_size = 文件大小($file_path);if ($file_size === $file->size) {如果 ($this->options['orient_image']) {$this->orient_image($file_path);}$file->url = $this->options['upload_url'].rawurlencode($file->name);foreach($this->options['image_versions'] as $version => $options) {if ($this->create_scaled_image($file->name, $options)) {if ($this->options['upload_dir'] !== $options['upload_dir']) {$file->{$version.'_url'} = $options['upload_url'].rawurlencode($file->name);} 別的 {clearstatcache();$file_size = 文件大小($file_path);}}}} else if ($this->options['discard_aborted_uploads']) {取消鏈接($file_path);$file->error = '中止';}$file->size = $file_size;$this->set_file_delete_url($file);} 別的 {$file->error = $error;}返回 $ 文件;}公共函數(shù) get() {$file_name = isset($_REQUEST['file']) ?basename(stripslashes($_REQUEST['file'])) : null;如果($file_name){$info = $this->get_file_object($file_name);} 別的 {$info = $this->get_file_objects();}header('內(nèi)容類型:應(yīng)用程序/json');回聲 json_encode($info);}公共函數(shù) post() {if (isset($_REQUEST['_method']) && $_REQUEST['_method'] === 'DELETE') {返回 $this->delete();}$upload = isset($_FILES[$this->options['param_name']]) ?$_FILES[$this->options['param_name']] : null;$info = 數(shù)組();if ($upload && is_array($upload['tmp_name'])) {//param_name 是一個(gè)數(shù)組標(biāo)識(shí)符,如files[]",//$_FILES 是一個(gè)多維數(shù)組:foreach ($upload['tmp_name'] as $index => $value) {$info[] = $this->handle_file_upload($upload['tmp_name'][$index],isset($_SERVER['HTTP_X_FILE_NAME']) ?$_SERVER['HTTP_X_FILE_NAME'] : $upload['name'][$index],isset($_SERVER['HTTP_X_FILE_SIZE']) ?$_SERVER['HTTP_X_FILE_SIZE'] : $upload['size'][$index],isset($_SERVER['HTTP_X_FILE_TYPE']) ?$_SERVER['HTTP_X_FILE_TYPE'] : $upload['type'][$index],$上傳['錯(cuò)誤'][$index]);}} elseif ($upload || isset($_SERVER['HTTP_X_FILE_NAME'])) {//param_name 是一個(gè)單一的對(duì)象標(biāo)識(shí)符,如文件",//$_FILES 是一維數(shù)組:$info[] = $this->handle_file_upload(isset($upload['tmp_name']) ?$upload['tmp_name'] : null,isset($_SERVER['HTTP_X_FILE_NAME']) ?$_SERVER['HTTP_X_FILE_NAME'] : (isset($upload['name']) ?$upload['name'] : null),isset($_SERVER['HTTP_X_FILE_SIZE']) ?$_SERVER['HTTP_X_FILE_SIZE'] : (isset($upload['size']) ?$upload['size'] : null),isset($_SERVER['HTTP_X_FILE_TYPE']) ?$_SERVER['HTTP_X_FILE_TYPE'] : (isset($upload['type']) ?$upload['type'] : null),isset($upload['error']) ?$upload['error'] : null);}header('變化:接受');$json = json_encode($info);$redirect = isset($_REQUEST['redirect']) ?stripslashes($_REQUEST['redirect']) : null;如果($重定向){header('位置:'.sprintf($redirect, rawurlencode($json)));返回;}if (isset($_SERVER['HTTP_ACCEPT']) &&(strpos($_SERVER['HTTP_ACCEPT'], 'application/json') !== false)) {header('內(nèi)容類型:應(yīng)用程序/json');} 別的 {header('內(nèi)容類型:文本/普通');}回聲 $json;}公共函數(shù)刪除(){$file_name = isset($_REQUEST['file']) ?basename(stripslashes($_REQUEST['file'])) : null;$file_path = $this->options['upload_dir'].$file_name;$success = is_file($file_path) &&$file_name[0] !== '.'&&取消鏈接($file_path);如果($成功){foreach($this->options['image_versions'] as $version => $options) {$file = $options['upload_dir'].$file_name;如果(is_file($文件)){取消鏈接($文件);}}}header('內(nèi)容類型:應(yīng)用程序/json');回聲 json_encode($success);}}

你的元素應(yīng)該是這樣的:

<?php echo $this->Html->css('fileuploads/bootstrap.min');?><!-- 響應(yīng)式網(wǎng)站布局的 Bootstrap 樣式,支持不同的屏幕尺寸 --><?php echo $this->Html->css('fileuploads/bootstrap-responsive.min');?><!-- IE6 的 Bootstrap CSS 修復(fù) --><!--[if lt IE 7]><?php echo $this->Html->css('fileuploads/bootstrap-ie6.min');?><![endif]--><!-- Bootstrap 圖片庫樣式--><?php echo $this->Html->css('fileuploads/bootstrap-image-gallery.min');?><!-- CSS 將文件輸入字段的樣式設(shè)置為按鈕并調(diào)整 Bootstrap 進(jìn)度條 --><?php echo $this->Html->css('fileuploads/jquery.fileupload-ui');?><!-- Shim 使 HTML5 元素可用于較舊的 Internet Explorer 版本--><!--[if lt IE 9]><?php echo $this->Html->script('html5');?></script><![endif]-->

添加文件...開始上傳取消上傳刪除

 </tbody></表單>

<!-- modal-gallery 是用于圖片庫的模態(tài)對(duì)話框--><div id="modal-gallery" class="modal-modal-gallery hidefade"><div class="modal-header"><a class="close" data-dismiss="modal">&times;</a><h3 class="modal-title"></h3>

<div class="modal-body"><div class="modal-image"></div></div><div class="modal-footer"><a class="btn modal-download" target="_blank"><i class="icon-download"></i><span>下載</span></a><a class="btn btn-success modal-play modal-slideshow" data-slideshow="5000"><i class="icon-play icon-white"></i><span>幻燈片</span></a><a class="btn btn-info modal-prev"><i class="icon-arrow-left icon-white"></i><span>上一個(gè)</span></a><a class="btn btn-primary modal-next"><span>下一步</span><i class="icon-arrow-right icon-white"></i></a>

<!-- 顯示可上傳文件的模板--><script id="template-upload" type="text/x-tmpl">{% for (var i=0, file; file=o.files[i]; i++) { %}<tr class="模板上傳淡入淡出"><td class="preview"><span class="fade"></span></td><td class="name"><span>{%=file.name%}</span></td><td class="size"><span>{%=o.formatFileSize(file.size)%}</span></td>{% if (file.error) { %}<td class="error" colspan="2"><span class="label label-important">{%=locale.fileupload.error%}</span>{%=locale.fileupload.errors[file.error] ||file.error%}</td>{% } else if (o.files.valid && !i) { %}<td><div class="progress progress-success progress-striped active"><div class="bar" style="width:0%;"></div></div></td><td class="start">{% if (!o.options.autoUpload) { %}<button class="btn btn-primary"><i class="icon-upload icon-white"></i><span>{%=locale.fileupload.start%}</span>{% } %}</td>{% } 別的 { %}<td colspan="2"></td>{%}%}<td class="cancel">{% if (!i) { %}<button class="btn btn-warning"><i class="icon-ban-circle icon-white"></i><span>{%=locale.fileupload.cancel%}</span>{% } %}</td></tr>{%}%}<!-- 顯示可供下載的文件的模板--><script id="template-download" type="text/x-tmpl">{% for (var i=0, file; file=o.files[i]; i++) { %}<tr class="模板下載淡入淡出">{% if (file.error) { %}<td></td><td class="name"><span>{%=file.name%}</span></td><td class="size"><span>{%=o.formatFileSize(file.size)%}</span></td><td class="error" colspan="2"><span class="label label-important">{%=locale.fileupload.error%}</span>{%=locale.fileupload.errors[file.error] ||file.error%}</td>{% } 別的 { %}<td class="preview">{% if (file.thumbnail_url) { %}<a href="{%=file.url%}" title="{%=file.name%}" rel="gallery" download="{%=file.name%}"><img src="{%=file.thumbnail_url%}"></a>{% } %}</td><td class="name"><a href="{%=file.url%}" title="{%=file.name%}" rel="{%=file.thumbnail_url&&'gallery'%}" download="{%=file.name%}">{%=file.name%}</a></td><td class="size"><span>{%=o.formatFileSize(file.size)%}</span></td><td colspan="2"></td>{%}%}<td class="刪除"><button class="btn btn-danger" data-type="{%=file.delete_type%}" data-url="{%=file.delete_url%}"><i class="icon-trash icon-white"></i><span>{%=locale.fileupload.destroy%}</span><input type="checkbox" name="delete" value="1"></td></tr>{%}%}

<!-- jQuery UI 部件工廠,如果已經(jīng)包含 jQuery UI 可以省略 --><?php echo $this->Html->script('fileuploads/vendor/jquery.ui.widget');?><!-- 包含模板插件以呈現(xiàn)上傳/下載列表--><?php echo $this->Html->script('fileuploads/tmpl.min');?><!-- 包含用于預(yù)覽圖像和圖像大小調(diào)整的加載圖像插件功能 --><?php echo $this->Html->script('fileuploads/load-image.min');?><!-- 包含用于調(diào)整圖像大小功能的 Canvas to Blob 插件 --><?php echo $this->Html->script('fileuploads/canvas-to-blob.min');?><!-- Bootstrap JS 和 Bootstrap Image Gallery 不是必需的,但包含在演示中 --><?php echo $this->Html->script(array('fileuploads/bootstrap.min', 'fileuploads/bootstrap-image-gallery.min'));?><!-- 不支持 XHR 文件上傳的瀏覽器需要 Iframe Transport --><?php echo $this->Html->script('fileuploads/jquery.iframe-transport');?><!-- 基本的文件上傳插件--><?php echo $this->Html->script('fileuploads/jquery.fileupload');?><!-- 文件上傳圖片處理插件--><?php echo $this->Html->script('fileuploads/jquery.fileupload-ip');?><!-- 文件上傳用戶界面插件--><?php echo $this->Html->script('fileuploads/jquery.fileupload-ui');?><!-- 本地化腳本--><?php echo $this->Html->script('fileuploads/locale');?><!-- 主應(yīng)用腳本--><?php echo $this->Html->script('fileuploads/main');?><!-- IE8+跨域文件刪除包含XDomainRequest傳輸--><!--[if gte IE 8]><?php echo $this->Html->script('fileuploads/cors/jquery.xdr-transport');?><![endif]-->

Wa are using CakePHP and need to integrate the Blue Imp file upload libraries. Has anyone successfully integrated these? If so, did you setup the upload to store files on the database or file system? Can you share examples of such an integration?

Thanks much for your help and guidance.

解決方案

Yes I integrated the BlueImp file upload functionality in php. Please find the following component and the element to use.

<?php
/*
 * jQuery File Upload Plugin PHP Class 5.9.1
 * https://github.com/blueimp/jQuery-File-Upload
 *
 * Copyright 2010, Sebastian Tschan
 * https://blueimp.net
 *
 * Licensed under the MIT license:
 * http://www.opensource.org/licenses/MIT
 * Created By: Arun Jain
 */
App::import('Core', 'Inflector');
class UploadComponent extends Component
{

protected $options;

function __construct($options=null) {
    $this->options = array(
        'script_url' => $this->getFullUrl().'/',
        'upload_dir' => dirname($_SERVER['SCRIPT_FILENAME']).'/attachments/files/',
        'upload_url' => $this->getFullUrl().'/files/',
        'param_name' => 'files',
        // Set the following option to 'POST', if your server does not support
        // DELETE requests. This is a parameter sent to the client:
        'delete_type' => 'POST',
        // The php.ini settings upload_max_filesize and post_max_size
        // take precedence over the following max_file_size setting:
        'max_file_size' => null,
        'min_file_size' => 1,
        'accept_file_types' => '/.+$/i',
        'max_number_of_files' => null,
        // Set the following option to false to enable resumable uploads:
        'discard_aborted_uploads' => true,
        // Set to true to rotate images based on EXIF meta data, if available:
        'orient_image' => false,
        'image_versions' => array(
            // Uncomment the following version to restrict the size of
            // uploaded images. You can also add additional versions with
            // their own upload directories:
            /*
            'large' => array(
                'upload_dir' => dirname($_SERVER['SCRIPT_FILENAME']).'/files/',
                'upload_url' => $this->getFullUrl().'/files/',
                'max_width' => 1920,
                'max_height' => 1200,
                'jpeg_quality' => 95
            ),
            */
            'thumbnail' => array(
                'upload_dir' => dirname($_SERVER['SCRIPT_FILENAME']).'/attachments/thumbnails/',
                'upload_url' => $this->getFullUrl().'/attachments/thumbnails/',
                'max_width' => 80,
                'max_height' => 80
            )
        )
    );
    if (is_array($options)) {
        $this->options = array_replace_recursive($this->options, $options);
    }
}

protected function getFullUrl() {
    return
        (isset($_SERVER['HTTPS']) ? 'https://' : 'http://').
        (isset($_SERVER['REMOTE_USER']) ? $_SERVER['REMOTE_USER'].'@' : '').
        (isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : ($_SERVER['SERVER_NAME'].
        (isset($_SERVER['HTTPS']) && $_SERVER['SERVER_PORT'] === 443 ||
        $_SERVER['SERVER_PORT'] === 80 ? '' : ':'.$_SERVER['SERVER_PORT']))).
        substr($_SERVER['SCRIPT_NAME'],0, strrpos($_SERVER['SCRIPT_NAME'], '/'));
}

protected function set_file_delete_url($file) {
    $file->delete_url = $this->options['script_url']
        .'?file='.rawurlencode($file->name);
    $file->delete_type = $this->options['delete_type'];
    if ($file->delete_type !== 'DELETE') {
        $file->delete_url .= '&_method=DELETE';
    }
}

protected function get_file_object($file_name) {
    $file_path = $this->options['upload_dir'].$file_name;
    if (is_file($file_path) && $file_name[0] !== '.') {
        $file = new stdClass();
        $file->name = $file_name;
        $file->size = filesize($file_path);
        $file->url = $this->options['upload_url'].rawurlencode($file->name);
        foreach($this->options['image_versions'] as $version => $options) {
            if (is_file($options['upload_dir'].$file_name)) {
                $file->{$version.'_url'} = $options['upload_url']
                    .rawurlencode($file->name);
            }
        }
        $this->set_file_delete_url($file);
        return $file;
    }
    return null;
}

protected function get_file_objects() {
    return array_values(array_filter(array_map(
        array($this, 'get_file_object'),
        scandir($this->options['upload_dir'])
    )));
}

protected function create_scaled_image($file_name, $options) {
    $file_path = $this->options['upload_dir'].$file_name;
    $new_file_path = $options['upload_dir'].$file_name;
    list($img_width, $img_height) = @getimagesize($file_path);
    if (!$img_width || !$img_height) {
        return false;
    }
    $scale = min(
        $options['max_width'] / $img_width,
        $options['max_height'] / $img_height
    );
    if ($scale >= 1) {
        if ($file_path !== $new_file_path) {
            return copy($file_path, $new_file_path);
        }
        return true;
    }
    $new_width = $img_width * $scale;
    $new_height = $img_height * $scale;
    $new_img = @imagecreatetruecolor($new_width, $new_height);
    switch (strtolower(substr(strrchr($file_name, '.'), 1))) {
        case 'jpg':
        case 'jpeg':
            $src_img = @imagecreatefromjpeg($file_path);
            $write_image = 'imagejpeg';
            $image_quality = isset($options['jpeg_quality']) ?
                $options['jpeg_quality'] : 75;
            break;
        case 'gif':
            @imagecolortransparent($new_img, @imagecolorallocate($new_img, 0, 0, 0));
            $src_img = @imagecreatefromgif ($file_path);
            $write_image = 'imagegif';
            $image_quality = null;
            break;
        case 'png':
            @imagecolortransparent($new_img, @imagecolorallocate($new_img, 0, 0, 0));
            @imagealphablending($new_img, false);
            @imagesavealpha($new_img, true);
            $src_img = @imagecreatefrompng($file_path);
            $write_image = 'imagepng';
            $image_quality = isset($options['png_quality']) ?
                $options['png_quality'] : 9;
            break;
        default:
            $src_img = null;
    }
    $success = $src_img && @imagecopyresampled(
        $new_img,
        $src_img,
        0, 0, 0, 0,
        $new_width,
        $new_height,
        $img_width,
        $img_height
    ) && $write_image($new_img, $new_file_path, $image_quality);
    // Free up memory (imagedestroy does not delete files):
    @imagedestroy($src_img);
    @imagedestroy($new_img);
    return $success;
}

protected function has_error($uploaded_file, $file, $error) {
    if ($error) {
        return $error;
    }
    if (!preg_match($this->options['accept_file_types'], $file->name)) {
        return 'acceptFileTypes';
    }
    if ($uploaded_file && is_uploaded_file($uploaded_file)) {
        $file_size = filesize($uploaded_file);
    } else {
        $file_size = $_SERVER['CONTENT_LENGTH'];
    }
    if ($this->options['max_file_size'] && (
            $file_size > $this->options['max_file_size'] ||
            $file->size > $this->options['max_file_size'])
        ) {
        return 'maxFileSize';
    }
    if ($this->options['min_file_size'] &&
        $file_size < $this->options['min_file_size']) {
        return 'minFileSize';
    }
    if (is_int($this->options['max_number_of_files']) && (
            count($this->get_file_objects()) >= $this->options['max_number_of_files'])
        ) {
        return 'maxNumberOfFiles';
    }
    return $error;
}

protected function upcount_name_callback($matches) {
    $index = isset($matches[1]) ? intval($matches[1]) + 1 : 1;
    $ext = isset($matches[2]) ? $matches[2] : '';
    return ' ('.$index.')'.$ext;
}

protected function upcount_name($name) {
    return preg_replace_callback(
        '/(?:(?: (([d]+)))?(.[^.]+))?$/',
        array($this, 'upcount_name_callback'),
        $name,
        1
    );
}

protected function trim_file_name($name, $type) {
    // Remove path information and dots around the filename, to prevent uploading
    // into different directories or replacing hidden system files.
    // Also remove control characters and spaces (x00..x20) around the filename:
    $file_name = trim(basename(stripslashes($name)), ".x00..x20");
    // Add missing file extension for known image types:
    if (strpos($file_name, '.') === false &&
        preg_match('/^image/(gif|jpe?g|png)/', $type, $matches)) {
        $file_name .= '.'.$matches[1];
    }
    if ($this->options['discard_aborted_uploads']) {
        while(is_file($this->options['upload_dir'].$file_name)) {
            $file_name = $this->upcount_name($file_name);
        }
    }
    return $file_name;
}

protected function orient_image($file_path) {
    $exif = exif_read_data($file_path);
    $orientation = intval(@$exif['Orientation']);
    if (!in_array($orientation, array(3, 6, 8))) { 
        return false;
    }
    $image = @imagecreatefromjpeg($file_path);
    switch ($orientation) {
          case 3:
            $image = @imagerotate($image, 180, 0);
            break;
          case 6:
            $image = @imagerotate($image, 270, 0);
            break;
          case 8:
            $image = @imagerotate($image, 90, 0);
            break;
        default:
            return false;
    }
    $success = imagejpeg($image, $file_path);
    // Free up memory (imagedestroy does not delete files):
    @imagedestroy($image);
    return $success;
}

protected function handle_file_upload($uploaded_file, $name, $size, $type, $error) {
    $file = new stdClass();
    $file->name = $this->trim_file_name($name, $type);
    $file->size = intval($size);
    $file->type = $type;
    $error = $this->has_error($uploaded_file, $file, $error);
    if (!$error && $file->name) {
        $file_path = $this->options['upload_dir'].$file->name;
        $append_file = !$this->options['discard_aborted_uploads'] &&
            is_file($file_path) && $file->size > filesize($file_path);
        clearstatcache();
        if ($uploaded_file && is_uploaded_file($uploaded_file)) {
            // multipart/formdata uploads (POST method uploads)
            if ($append_file) {
                file_put_contents(
                    $file_path,
                    fopen($uploaded_file, 'r'),
                    FILE_APPEND
                );
            } else {
                move_uploaded_file($uploaded_file, $file_path);
            }
        } else {
            // Non-multipart uploads (PUT method support)
            file_put_contents(
                $file_path,
                fopen('php://input', 'r'),
                $append_file ? FILE_APPEND : 0
            );
        }
        $file_size = filesize($file_path);
        if ($file_size === $file->size) {
            if ($this->options['orient_image']) {
                $this->orient_image($file_path);
            }
            $file->url = $this->options['upload_url'].rawurlencode($file->name);
            foreach($this->options['image_versions'] as $version => $options) {
                if ($this->create_scaled_image($file->name, $options)) {
                    if ($this->options['upload_dir'] !== $options['upload_dir']) {
                        $file->{$version.'_url'} = $options['upload_url']
                            .rawurlencode($file->name);
                    } else {
                        clearstatcache();
                        $file_size = filesize($file_path);
                    }
                }
            }
        } else if ($this->options['discard_aborted_uploads']) {
            unlink($file_path);
            $file->error = 'abort';
        }
        $file->size = $file_size;
        $this->set_file_delete_url($file);
    } else {
        $file->error = $error;
    }
    return $file;
}

public function get() {
    $file_name = isset($_REQUEST['file']) ?
        basename(stripslashes($_REQUEST['file'])) : null;
    if ($file_name) {
        $info = $this->get_file_object($file_name);
    } else {
        $info = $this->get_file_objects();
    }
    header('Content-type: application/json');
    echo json_encode($info);
}

public function post() {
    if (isset($_REQUEST['_method']) && $_REQUEST['_method'] === 'DELETE') {
        return $this->delete();
    }
    $upload = isset($_FILES[$this->options['param_name']]) ?
        $_FILES[$this->options['param_name']] : null;
    $info = array();
    if ($upload && is_array($upload['tmp_name'])) {
        // param_name is an array identifier like "files[]",
        // $_FILES is a multi-dimensional array:
        foreach ($upload['tmp_name'] as $index => $value) {
            $info[] = $this->handle_file_upload(
                $upload['tmp_name'][$index],
                isset($_SERVER['HTTP_X_FILE_NAME']) ?
                    $_SERVER['HTTP_X_FILE_NAME'] : $upload['name'][$index],
                isset($_SERVER['HTTP_X_FILE_SIZE']) ?
                    $_SERVER['HTTP_X_FILE_SIZE'] : $upload['size'][$index],
                isset($_SERVER['HTTP_X_FILE_TYPE']) ?
                    $_SERVER['HTTP_X_FILE_TYPE'] : $upload['type'][$index],
                $upload['error'][$index]
            );
        }
    } elseif ($upload || isset($_SERVER['HTTP_X_FILE_NAME'])) {
        // param_name is a single object identifier like "file",
        // $_FILES is a one-dimensional array:
        $info[] = $this->handle_file_upload(
            isset($upload['tmp_name']) ? $upload['tmp_name'] : null,
            isset($_SERVER['HTTP_X_FILE_NAME']) ?
                $_SERVER['HTTP_X_FILE_NAME'] : (isset($upload['name']) ?
                    $upload['name'] : null),
            isset($_SERVER['HTTP_X_FILE_SIZE']) ?
                $_SERVER['HTTP_X_FILE_SIZE'] : (isset($upload['size']) ?
                    $upload['size'] : null),
            isset($_SERVER['HTTP_X_FILE_TYPE']) ?
                $_SERVER['HTTP_X_FILE_TYPE'] : (isset($upload['type']) ?
                    $upload['type'] : null),
            isset($upload['error']) ? $upload['error'] : null
        );
    }
    header('Vary: Accept');
    $json = json_encode($info);
    $redirect = isset($_REQUEST['redirect']) ?
        stripslashes($_REQUEST['redirect']) : null;
    if ($redirect) {
        header('Location: '.sprintf($redirect, rawurlencode($json)));
        return;
    }
    if (isset($_SERVER['HTTP_ACCEPT']) &&
        (strpos($_SERVER['HTTP_ACCEPT'], 'application/json') !== false)) {
        header('Content-type: application/json');
    } else {
        header('Content-type: text/plain');
    }
    echo $json;
}

public function delete() {
    $file_name = isset($_REQUEST['file']) ?
        basename(stripslashes($_REQUEST['file'])) : null;
    $file_path = $this->options['upload_dir'].$file_name;
    $success = is_file($file_path) && $file_name[0] !== '.' && unlink($file_path);
    if ($success) {
        foreach($this->options['image_versions'] as $version => $options) {
            $file = $options['upload_dir'].$file_name;
            if (is_file($file)) {
                unlink($file);
            }
        }
    }
    header('Content-type: application/json');
    echo json_encode($success);
}

}

And your element should looks like it:

<!-- Bootstrap CSS Toolkit styles -->
<?php echo $this->Html->css('fileuploads/bootstrap.min');?>
<!-- Bootstrap styles for responsive website layout, supporting different screen sizes     -->
<?php echo $this->Html->css('fileuploads/bootstrap-responsive.min');?>
<!-- Bootstrap CSS fixes for IE6 -->
<!--[if lt IE 7]><?php echo $this->Html->css('fileuploads/bootstrap-ie6.min');?>        <![endif]-->
<!-- Bootstrap Image Gallery styles -->
<?php echo $this->Html->css('fileuploads/bootstrap-image-gallery.min');?>
<!-- CSS to style the file input field as button and adjust the Bootstrap progress      bars -->
<?php echo $this->Html->css('fileuploads/jquery.fileupload-ui');?>
<!-- Shim to make HTML5 elements usable in older Internet Explorer versions -->
<!--[if lt IE 9]><?php echo $this->Html->script('html5');?></script><![endif]-->

Add files... Start upload Cancel upload Delete

        </tbody>
    </table>
</form>    
</div>
<!-- modal-gallery is the modal dialog used for the image gallery -->
<div id="modal-gallery" class="modal modal-gallery hide fade">
    <div class="modal-header">
        <a class="close" data-dismiss="modal">&times;</a>
        <h3 class="modal-title"></h3>
    </div>

    <div class="modal-body"><div class="modal-image"></div></div>
<div class="modal-footer">
    <a class="btn modal-download" target="_blank">
        <i class="icon-download"></i>
        <span>Download</span>
    </a>
    <a class="btn btn-success modal-play modal-slideshow" data-slideshow="5000">
        <i class="icon-play icon-white"></i>
        <span>Slideshow</span>
    </a>
    <a class="btn btn-info modal-prev">
        <i class="icon-arrow-left icon-white"></i>
        <span>Previous</span>
    </a>
    <a class="btn btn-primary modal-next">
        <span>Next</span>
        <i class="icon-arrow-right icon-white"></i>
    </a>
</div>
</div>
<!-- The template to display files available for upload -->
<script id="template-upload" type="text/x-tmpl">
{% for (var i=0, file; file=o.files[i]; i++) { %}
<tr class="template-upload fade">
    <td class="preview"><span class="fade"></span></td>
    <td class="name"><span>{%=file.name%}</span></td>
    <td class="size"><span>{%=o.formatFileSize(file.size)%}</span></td>
    {% if (file.error) { %}
        <td class="error" colspan="2"><span class="label label-important">{%=locale.fileupload.error%}</span> {%=locale.fileupload.errors[file.error] || file.error%}</td>

        {% } else if (o.files.valid && !i) { %}
        <td>
            <div class="progress progress-success progress-striped active"><div class="bar" style="width:0%;"></div></div>
        </td>
        <td class="start">{% if (!o.options.autoUpload) { %}
            <button class="btn btn-primary">
                <i class="icon-upload icon-white"></i>
                <span>{%=locale.fileupload.start%}</span>
            </button>
        {% } %}</td>
    {% } else { %}
        <td colspan="2"></td>
    {% } %}
    <td class="cancel">{% if (!i) { %}
        <button class="btn btn-warning">
            <i class="icon-ban-circle icon-white"></i>
            <span>{%=locale.fileupload.cancel%}</span>
        </button>
    {% } %}</td>
</tr>
{% } %}
</script>
<!-- The template to display files available for download -->
<script id="template-download" type="text/x-tmpl">
{% for (var i=0, file; file=o.files[i]; i++) { %}
<tr class="template-download fade">
    {% if (file.error) { %}
        <td></td>
        <td class="name"><span>{%=file.name%}</span></td>
        <td class="size"><span>{%=o.formatFileSize(file.size)%}</span></td>
        <td class="error" colspan="2"><span class="label label-important">{%=locale.fileupload.error%}</span> {%=locale.fileupload.errors[file.error] || file.error%}</td>
    {% } else { %}
        <td class="preview">{% if (file.thumbnail_url) { %}
            <a href="{%=file.url%}" title="{%=file.name%}" rel="gallery" download="{%=file.name%}"><img src="{%=file.thumbnail_url%}"></a>
        {% } %}</td>
        <td class="name">
            <a href="{%=file.url%}" title="{%=file.name%}" rel="{%=file.thumbnail_url&&'gallery'%}" download="{%=file.name%}">{%=file.name%}</a>
        </td>
        <td class="size"><span>{%=o.formatFileSize(file.size)%}</span></td>
        <td colspan="2"></td>
    {% } %}
    <td class="delete">
        <button class="btn btn-danger" data-type="{%=file.delete_type%}" data-url="{%=file.delete_url%}">
            <i class="icon-trash icon-white"></i>
            <span>{%=locale.fileupload.destroy%}</span>
        </button>
        <input type="checkbox" name="delete" value="1">
    </td>
</tr>
{% } %}

<!-- The jQuery UI widget factory, can be omitted if jQuery UI is already included -->
<?php echo $this->Html->script('fileuploads/vendor/jquery.ui.widget');?>
<!-- The Templates plugin is included to render the upload/download listings -->
<?php echo $this->Html->script('fileuploads/tmpl.min');?>
<!-- The Load Image plugin is included for the preview images and image resizing 
functionality -->
<?php echo $this->Html->script('fileuploads/load-image.min');?>
<!-- The Canvas to Blob plugin is included for image resizing functionality -->
<?php echo $this->Html->script('fileuploads/canvas-to-blob.min');?>
<!-- Bootstrap JS and Bootstrap Image Gallery are not required, but included for the demo -->
<?php echo $this->Html->script(array('fileuploads/bootstrap.min', 'fileuploads/bootstrap-image-gallery.min'));?>
<!-- The Iframe Transport is required for browsers without support for XHR file uploads -->
<?php echo $this->Html->script('fileuploads/jquery.iframe-transport');?>
<!-- The basic File Upload plugin -->
<?php echo $this->Html->script('fileuploads/jquery.fileupload');?>
<!-- The File Upload image processing plugin -->
<?php echo $this->Html->script('fileuploads/jquery.fileupload-ip');?>
<!-- The File Upload user interface plugin -->
<?php echo $this->Html->script('fileuploads/jquery.fileupload-ui');?>
<!-- The localization script -->
<?php echo $this->Html->script('fileuploads/locale');?>
<!-- The main application script -->
<?php echo $this->Html->script('fileuploads/main');?>
<!-- The XDomainRequest Transport is included for cross-domain file deletion for IE8+ -->
<!--[if gte IE 8]><?php echo $this->Html->script('fileuploads/cors/jquery.xdr-transport');?><!  [endif]-->

這篇關(guān)于如何將 Blue Imp 文件上傳集成到 CakePHP?的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,也希望大家多多支持html5模板網(wǎng)!

【網(wǎng)站聲明】本站部分內(nèi)容來源于互聯(lián)網(wǎng),旨在幫助大家更快的解決問題,如果有圖片或者內(nèi)容侵犯了您的權(quán)益,請(qǐng)聯(lián)系我們刪除處理,感謝您的支持!

相關(guān)文檔推薦

Session is lost after an OAuth redirect(OAuth 重定向后會(huì)話丟失)
Pagination Sort in Cakephp 3.x(Cakephp 3.x 中的分頁排序)
CakePHP Shared core for multiple apps(CakePHP 多個(gè)應(yīng)用程序的共享核心)
Login [ Auth-gt;identify() ] always false on CakePHP 3(在 CakePHP 3 上登錄 [ Auth-identify() ] 始終為 false)
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 87 bytes)(致命錯(cuò)誤:允許的內(nèi)存大小為 134217728 字節(jié)已用盡(嘗試分配 87 字節(jié)))
主站蜘蛛池模板: 不卡一区二区三区四区 | 性福视频在线观看 | 最新91在线 | 99精品国产成人一区二区 | 国产精品久久免费观看 | 欧美一区二区三区在线免费观看 | 中文字幕欧美在线观看 | 九九久久国产 | 精品视频一区二区三区在线观看 | 国产精品视频一二三区 | 一区二区在线看 | 一级全黄少妇性色生活免费看 | 国产免费自拍 | 亚洲精品久久久久久一区二区 | 国产伦精品一区二区三区在线 | 国产精品嫩草影院精东 | 亚洲一区二区三区欧美 | 日韩精品一区二区三区在线观看 | 欧美亚洲第一区 | 国产美女永久免费无遮挡 | 欧美综合久久 | 色网站在线免费观看 | 天天操天天摸天天爽 | 欧美色性 | 波多野结衣一区二区 | 国产精品久久久久久久久久不蜜臀 | 在线观看中文字幕 | 国产玖玖 | av香港经典三级级 在线 | 成人欧美一区二区三区1314 | 特一级毛片 | 亚洲永久字幕 | 青青草一区| 久久久91精品国产一区二区三区 | 亚洲欧美中文日韩在线v日本 | 精品一区二区三区免费毛片 | 国产成人精品av | 国产小u女发育末成年 | 中文字幕一区二区三区四区五区 | 国产区精品在线观看 | 国产精品国产成人国产三级 |