热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

sae中配置weiphp,修复图片上传问题

首先在Storage中新建domin:uploads;然后修改以下文件1、Sae.class.php中修改为:**保存指定文件*@param
首先在Storage中新建domin:uploads;
然后修改以下文件

1、Sae.class.php 中修改为:  

    /** 保存指定文件
     * @param  array   $file    保存的文件信息
     * @param  boolean $replace 同名文件是否覆盖
     * @return boolean          保存状态,true-成功,false-失败
     */

    public function save(&$file, $replace=true) {
        $filename = ltrim($this->rootPath .'/'. $file['savepath'] . $file['savename'],'/');
        $st=new \SaeStorage();
        /* 不覆盖同名文件 */
        if (!$replace && $st->fileExists($this->domain,$filename)) {
            $this->error = '存在同名文件' . $file['savename'];
            return false;
        }

        /* 移动文件 */
        $url = $st->upload($this->domain,$filename,$file['tmp_name']);
        if (!$url) {
            $this->error = '文件上传保存错误!['.$st->errno().']:'.$st->errmsg();
            return false;
        } else {
            $file['url'= $url;
            $file['download'= $url;
        }

        return true;

    }




2、/Application/Admin/Conf/config.php 修改为:
PHP代码 
  1.   /* 图片上传相关配置 */
  2.   'PICTURE_UPLOAD' => array(
  3.     'mimes'  => ''//允许上传的文件MiMe类型
  4.     'maxSize'  => 2*1024*1024, //上传的文件大小限制 (0-不做限制)
  5.     'exts'  => 'jpg,gif,png,jpeg'//允许上传的文件后缀
  6.     'autoSub'  => true, //自动子目录保存文件
  7.     'subName'  => array('date''Y-m-d'), //子目录创建方式,[0]-函数名,[1]-参数,多个参数使用数组
  8.     'rootPath' => './Uploads/Picture/'//保存根路径
  9.     'savePath' => ''//保存路径
  10.     'saveName' => array('uniqid'''), //上传文件命名规则,[0]-函数名,[1]-参数,多个参数使用数组
  11.     'saveExt'  => ''//文件保存后缀,空则使用原后缀
  12.     'replace'  => false, //存在同名是否覆盖
  13.     'hash'  => true, //是否生成hash编码
  14.     'callback' => false, //检测文件是否存在回调函数,如果存在返回文件信息数组
  15.   ), //图片上传相关配置(文件上传类配置)
  16.   //  'PICTURE_UPLOAD_DRIVER'=>'local',  
  17.   'PICTURE_UPLOAD_DRIVER'=>'Sae',
  18.   //SAE上传文件驱动配置
  19.   'UPLOAD_SAE_CONFIG'=>array(
  20.     'rootPath'=>'http://' . $_SERVER['HTTP_APPNAME'] . '-uploads.stor.sinaapp.com/Editor/',
  21.   'domain'=>'uploads',
  22. ),
  23.   
  24.   //本地上传文件驱动配置
  25.   'UPLOAD_LOCAL_CONFIG'=>array(),
  26.   'UPLOAD_BCS_CONFIG'=>array(
  27.     'AccessKey'=>'',
  28.     'SecretKey'=>'',
  29.     'bucket'=>'',
  30.     'rename'=>false
  31.   ),

3、/Application/Home/Conf/config.php 修改为:
  1. return array(
  2.     // 预先加载的标签库
  3.     'TAGLIB_PRE_LOAD'     =>    'OT\\TagLib\\Article,OT\\TagLib\\Think',
  4.         
  5.     /* 主题设置 */
  6.     'DEFAULT_THEME' =>  'default',  // 默认模板主题名称

  7.     /* SESSION 和 COOKIE 配置 */
  8.     'SESSION_PREFIX' => 'weiphp_home', //session前缀
  9.     'COOKIE_PREFIX'  => 'weiphp_home_', // COOKIE前缀 避免冲突

  10.     /**
  11.      * 附件相关配置
  12.      * 附件是规划在插件中的,所以附件的配置暂时写到这里
  13.      * 后期会移动到数据库进行管理
  14.      */
  15.     'ATTACHMENT_DEFAULT' => array(
  16.         'is_upload'     => true,
  17.         'allow_type'    => '0,1,2', //允许的附件类型 (0-目录,1-外链,2-文件)
  18.         'driver'        => 'Sae', //上传驱动
  19.         'driver_config' => null, //驱动配置
  20.     ), //附件默认配置

  21.     'ATTACHMENT_UPLOAD' => array(
  22.         'mimes'    => '', //允许上传的文件MiMe类型
  23.         'maxSize'  => 5*1024*1024, //上传的文件大小限制 (0-不做限制)
  24.         'exts'     => 'jpg,gif,png,jpeg,zip,rar,tar,gz,7z,doc,docx,txt,xml', //允许上传的文件后缀
  25.         'autoSub'  => true, //自动子目录保存文件
  26.         'subName'  => array('date', 'Y-m-d'), //子目录创建方式,[0]-函数名,[1]-参数,多个参数使用数组
  27.         'rootPath' => './Uploads/Attachment/', //保存根路径
  28.         'savePath' => '', //保存路径
  29.         'saveName' => array('uniqid', ''), //上传文件命名规则,[0]-函数名,[1]-参数,多个参数使用数组
  30.         'saveExt'  => '', //文件保存后缀,空则使用原后缀
  31.         'replace'  => false, //存在同名是否覆盖
  32.         'hash'     => true, //是否生成hash编码
  33.         'callback' => false, //检测文件是否存在回调函数,如果存在返回文件信息数组
  34.     ), //附件上传配置(文件上传类配置)
  35.     /* 模板相关配置 */
  36.     'TMPL_PARSE_STRING' => array(
  37.         '__STATIC__' => __ROOT__ . '/Public/static',
  38.         '__ADDONS__' => __ROOT__ . '/Public/' . MODULE_NAME . '/Addons',
  39.         '__IMG__'    => __ROOT__ . '/Public/' . MODULE_NAME . '/images',
  40.         '__CSS__'    => __ROOT__ . '/Public/' . MODULE_NAME . '/css',
  41.         '__JS__'     => __ROOT__ . '/Public/' . MODULE_NAME . '/js',
  42.     ),
  43.     /* 数据缓存设置 */
  44.     'DATA_CACHE_PREFIX'    => 'weiphp_', // 缓存前缀
  45.     'DATA_CACHE_TYPE'      => 'File', // 数据缓存类型
  46.     
  47.     /* 文件上传相关配置 */
  48.     'DOWNLOAD_UPLOAD' => array(
  49.         'mimes'    => '', //允许上传的文件MiMe类型
  50.         'maxSize'  => 5*1024*1024, //上传的文件大小限制 (0-不做限制)
  51.         'exts'     => 'jpg,gif,png,jpeg,zip,rar,tar,gz,7z,doc,docx,txt,xml', //允许上传的文件后缀
  52.         'autoSub'  => true, //自动子目录保存文件
  53.         'subName'  => array('date', 'Y-m-d'), //子目录创建方式,[0]-函数名,[1]-参数,多个参数使用数组
  54.         'rootPath' => './Uploads/Download/', //保存根路径
  55.         'savePath' => '', //保存路径
  56.         'saveName' => array('uniqid', ''), //上传文件命名规则,[0]-函数名,[1]-参数,多个参数使用数组
  57.         'saveExt'  => '', //文件保存后缀,空则使用原后缀
  58.         'replace'  => false, //存在同名是否覆盖
  59.         'hash'     => true, //是否生成hash编码
  60.         'callback' => false, //检测文件是否存在回调函数,如果存在返回文件信息数组
  61.     ), //下载模型上传配置(文件上传类配置)    
  62.     
  63.     /* 图片上传相关配置 */
  64.     'PICTURE_UPLOAD' => array(
  65.         'mimes'    => '', //允许上传的文件MiMe类型
  66.         'maxSize'  => 2*1024*1024, //上传的文件大小限制 (0-不做限制)
  67.         'exts'     => 'jpg,gif,png,jpeg', //允许上传的文件后缀
  68.         'autoSub'  => true, //自动子目录保存文件
  69.         'subName'  => array('date', 'Y-m-d'), //子目录创建方式,[0]-函数名,[1]-参数,多个参数使用数组
  70.         'rootPath' => './Uploads/Picture/', //保存根路径
  71.         'savePath' => '', //保存路径
  72.         'saveName' => array('uniqid', ''), //上传文件命名规则,[0]-函数名,[1]-参数,多个参数使用数组
  73.         'saveExt'  => '', //文件保存后缀,空则使用原后缀
  74.         'replace'  => false, //存在同名是否覆盖
  75.         'hash'     => true, //是否生成hash编码
  76.         'callback' => false, //检测文件是否存在回调函数,如果存在返回文件信息数组
  77.     ), //图片上传相关配置(文件上传类配置)

  78.     'PICTURE_UPLOAD_DRIVER'=>'Sae',    
  79.     
  80.     //本地上传文件驱动配置
  81.     'UPLOAD_LOCAL_CONFIG'=>array(),
  82.     'UPLOAD_BCS_CONFIG'=>array(
  83.         'AccessKey'=>'',
  84.         'SecretKey'=>'',
  85.         'bucket'=>'',
  86.         'rename'=>false
  87.     ),
  88.     'UPLOAD_QINIU_CONFIG'=>array(
  89.         'accessKey'=>'__ODsglZwwjRJNZHAu7vtcEf-zgIxdQAY-QqVrZD',
  90.         'secrectKey'=>'Z9-RahGtXhKeTUYy9WCnLbQ98ZuZ_paiaoBjByKv',
  91.         'bucket'=>'onethinktest',
  92.         'domain'=>'onethinktest.u.qiniudn.com',
  93.         'timeout'=>3600,
  94.     ),

  95.     /* 编辑器图片上传相关配置 */
  96.     'EDITOR_UPLOAD' => array(
  97.         'mimes'    => '', //允许上传的文件MiMe类型
  98.         'maxSize'  => 2*1024*1024, //上传的文件大小限制 (0-不做限制)
  99.         'exts'     => 'jpg,gif,png,jpeg', //允许上传的文件后缀
  100.         'autoSub'  => true, //自动子目录保存文件
  101.         'subName'  => array('date', 'Y-m-d'), //子目录创建方式,[0]-函数名,[1]-参数,多个参数使用数组
  102.         'rootPath' => './Uploads/Editor/', //保存根路径
  103.         'savePath' => '', //保存路径
  104.         'saveName' => array('uniqid', ''), //上传文件命名规则,[0]-函数名,[1]-参数,多个参数使用数组
  105.         'saveExt'  => '', //文件保存后缀,空则使用原后缀
  106.         'replace'  => false, //存在同名是否覆盖
  107.         'hash'     => true, //是否生成hash编码
  108.         'callback' => false, //检测文件是否存在回调函数,如果存在返回文件信息数组
  109.     ),        
  110. );
4、图片保存的位置 Application\Home\Model\PictureModel.class.php 修改为:
  1. namespace Home\Model;
  2. use Think\Model;
  3. use Think\Upload;

  4. /**
  5. * 图片模型
  6. * 负责图片的上传
  7. */

  8. class PictureModel extends Model{
  9.     /**
  10.      * 自动完成
  11.      * @var array
  12.      */
  13.     protected $_auto = array(
  14.         array('status', 1, self::MODEL_INSERT),
  15.         array('create_time', NOW_TIME, self::MODEL_INSERT),
  16.     );

  17.     /**
  18.      * 文件上传
  19.      * @param  array  $files   要上传的文件列表(通常是$_FILES数组)
  20.      * @param  array  $setting 文件上传配置
  21.      * @param  string $driver  上传驱动名称
  22.      * @param  array  $config  上传驱动配置
  23.      * @return array           文件上传成功后的信息
  24.      */
  25.     public function upload($files, $setting, $driver = 'Local', $cOnfig= null){
  26.         /* 上传文件 */
  27.         $setting['callback'] = array($this, 'isFile');
  28.         $setting['removeTrash'] = array($this, 'removeTrash');
  29.         $Upload = new Upload($setting, $driver, $config);
  30.         $info   = $Upload->upload($files);

  31.         if($info){ //文件上传成功,记录文件信息
  32.             foreach ($info as $key => &$value) {
  33.                 /* 已经存在文件记录 */
  34.                 if(isset($value['id']) && is_numeric($value['id'])){
  35.                     continue;
  36.                 }

  37.                 /* 记录文件信息 */
  38.                 if (strtolower($driver) == "sae") {
  39.                     $value['path'] = $value['url'];
  40.                 } else {
  41.                     $value['path'] = substr($setting['rootPath'], 1).$value['savepath'].$value['savename'];    //在模板里的url路径
  42.                 }
  43.                 if($this->create($value) && ($id = $this->add())){
  44.                     $value['id'] = $id;
  45.                 } else {
  46.                     //TODO: 文件上传成功,但是记录文件信息失败,需记录日志
  47.                     unset($info[$key]);
  48.                 }
  49.             }
  50.             return $info; //文件上传成功
  51.         } else {
  52.             $this->error = $Upload->getError();
  53.             return false;
  54.         }
  55.     }

  56.     /**
  57.      * 下载指定文件
  58.      * @param  number  $root 文件存储根目录
  59.      * @param  integer $id   文件ID
  60.      * @param  string   $args     回调函数参数
  61.      * @return boolean       false-下载失败,否则输出下载文件
  62.      */
  63.     public function download($root, $id, $callback = null, $args = null){
  64.         /* 获取下载文件信息 */
  65.         $file = $this->find($id);
  66.         if(!$file){
  67.             $this->error = '不存在该文件!';
  68.             return false;
  69.         }

  70.         /* 下载文件 */
  71.         switch ($file['location']) {
  72.             case 0: //下载本地文件
  73.                 $file['rootpath'] = $root;
  74.                 return $this->downLocalFile($file, $callback, $args);
  75.             case 1: //TODO: 下载远程FTP文件
  76.                 break;
  77.             default:
  78.                 $this->error = '不支持的文件存储类型!';
  79.                 return false;

  80.         }

  81.     }

  82.     /**
  83.      * 检测当前上传的文件是否已经存在
  84.      * @param  array   $file 文件上传数组
  85.      * @return boolean       文件信息, false - 不存在该文件
  86.      */
  87.     public function isFile($file){
  88.         if(empty($file['md5'])){
  89.             throw new \Exception('缺少参数:md5');
  90.         }
  91.         /* 查找文件 */
  92.         $map = array('md5' => $file['md5'],'sha1'=>$file['sha1'],);
  93.         return $this->field(true)->where($map)->find();
  94.     }

  95.     /**
  96.      * 下载本地文件
  97.      * @param  array    $file     文件信息数组
  98.      * @param  callable $callback 下载回调函数,一般用于增加下载次数
  99.      * @param  string   $args     回调函数参数
  100.      * @return boolean            下载失败返回false
  101.      */
  102.     private function downLocalFile($file, $callback = null, $args = null){
  103.         if(is_file($file['rootpath'].$file['savepath'].$file['savename'])){
  104.             /* 调用回调函数新增下载数 */
  105.             is_callable($callback) && call_user_func($callback, $args);

  106.             /* 执行下载 */ //TODO: 大文件断点续传
  107.             header("Content-Description: File Transfer");
  108.             header('Content-type: ' . $file['type']);
  109.             header('Content-Length:' . $file['size']);
  110.             if (preg_match('/MSIE/', $_SERVER['HTTP_USER_AGENT'])) { //for IE
  111.                 header('Content-Disposition: attachment; filename="' . rawurlencode($file['name']) . '"');
  112.             } else {
  113.                 header('Content-Disposition: attachment; filename="' . $file['name'] . '"');
  114.             }
  115.             readfile($file['rootpath'].$file['savepath'].$file['savename']);
  116.             exit;
  117.         } else {
  118.             $this->error = '文件已被删除!';
  119.             return false;
  120.         }
  121.     }

  122.     /**
  123.      * 清除数据库存在但本地不存在的数据
  124.      * @param $data
  125.      */
  126.     public function removeTrash($data){
  127.         $this->where(array('id'=>$data['id'],))->delete();
  128.     }

  129. }

5、图片取得的函数
Application\Common\Common\function.php x修改为:
  1. function get_cover_url($cover_id) {
  2.     if (empty ( $cover_id )) {
  3.         return '';
  4.     }

  5.     // modify by xiahy, 2014/04/11,将图片存在SAE的stor中,所以保存的是完整路径
  6.     // return SITE_URL . get_cover ( $cover_id, 'path' );
  7.     $coverPath = get_cover ( $cover_id, 'path' );
  8.     if (strstr($coverPath, 'http://') or  strstr($coverPath, 'https://')) {
  9.         return $coverPath;
  10.     } else {
  11.         return SITE_URL . $coverPath;
  12.     }
  13. }

6、修改: /Addons/EditorForAdmin/Controller/UploadController.class.php
修改: Local 为 Sae
修改: EDITOR_UPLOAD 为 UPLOAD_SAE_CONFIG


ps:

Sae.class.php 这个文件在哪

QQ截图20141030164647.png 



推荐阅读
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 本文介绍了使用cacti监控mssql 2005运行资源情况的操作步骤,包括安装必要的工具和驱动,测试mssql的连接,配置监控脚本等。通过php连接mssql来获取SQL 2005性能计算器的值,实现对mssql的监控。详细的操作步骤和代码请参考附件。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • 突破MIUI14限制,自定义胶囊图标、大图标样式,支持任意APP
    本文介绍了如何突破MIUI14的限制,实现自定义胶囊图标和大图标样式,并支持任意APP。需要一定的动手能力和主题设计师账号权限或者会主题pojie。详细步骤包括应用包名获取、素材制作和封包获取等。 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • MVC设计模式的介绍和演化过程
    本文介绍了MVC设计模式的基本概念和原理,以及在实际项目中的演化过程。通过分离视图、模型和控制器,实现了代码的解耦和重用,提高了项目的可维护性和可扩展性。详细讲解了分离视图、分离模型和分离控制器的具体步骤和规则,以及它们在项目中的应用。同时,还介绍了基础模型的封装和控制器的命名规则。该文章适合对MVC设计模式感兴趣的读者阅读和学习。 ... [详细]
author-avatar
极神bd韵
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有