配置Thinkphp3.2支持七牛图片上传的方法
发布:smiling 来源: PHP粉丝网 添加日期:2016-08-25 14:01:33 浏览: 评论:0
七牛图片上传方法我们只要在框架中配置它的接口及上传的些小细节就可以实现了,下面一起来看一个关于配置Thinkphp3.2支持七牛图片上传的方法,希望文章对各位有帮助.
作为php菜鸟,在公司捣鼓的一个基于thinkphp框架项目上要是用七牛(原来有用过C#版本的sdk),现在在官方找到php的官方sdk,最后发现原来Thinkphp已经支持驱动类型是qiniu的文件上传了.
现在将配置说明一下。
利用七牛云私有空间存储文件
注册七牛云,创建空间,将空间设为私有
需要记下的东西:
AK,SK,bucket
在config.php添加:
- //七牛上传文件设置
- 'PICTURE_UPLOAD_DRIVER'=>'Qiniu',
- //本地上传文件驱动配置
- 'UPLOAD_LOCAL_CONFIG'=>array(),
- 'UPLOAD_QINIU_CONFIG'=>array(
- 'accessKey'=>'l3N4q0XCqm0rssaaMTHryZYG-LnKMH',
- 'secrectKey'=>'7qPVaeRasasan2TjALqQAjF0h6jOt0D1jF',
- 'bucket'=>'yaasasnbao',
- 'domain'=>'7xasssa.com2.z0.glb.qiniucdn.com',
- 'timeout'=>3600,
- ),
3、添加一个上传类Model
- <?php
- // +----------------------------------------------------------------------
- // | OneThink [ WE CAN DO IT JUST THINK IT ]
- // +----------------------------------------------------------------------
- // | Copyright (c) 2013 http://www.onethink.cn All rights reserved.
- // +----------------------------------------------------------------------
- // | Author: huajie <banhuajie@163.com>
- // +----------------------------------------------------------------------
- namespace Admin\Model;
- use Think\Model;
- use Think\Upload;
- /**
- * 图片模型
- * 负责图片的上传
- */
- class PictureModel extends Model{
- /**
- * 自动完成
- * @var array
- */
- protected $_auto = array(
- array('status', 1, self::MODEL_INSERT),
- array('create_time', NOW_TIME, self::MODEL_INSERT),
- );
- /**
- * 文件上传
- * @param array $files 要上传的文件列表(通常是$_FILES数组)
- * @param array $setting 文件上传配置
- * @param string $driver 上传驱动名称
- * @param array $config 上传驱动配置
- * @return array 文件上传成功后的信息
- */
- public function upload($files, $setting, $driver = 'Local', $config = null){
- /* 上传文件 */
- $Upload = new Upload($setting, $driver, $config);
- $info = $Upload->upload($files);
- if($info){ //文件上传成功,记录文件信息
- return $info; //文件上传成功
- } else {
- $this->error = $Upload->getError();
- return false;
- }
- }
- /**
- * 下载指定文件
- * @param number $root 文件存储根目录
- * @param integer $id 文件ID
- * @param string $args 回调函数参数
- * @return boolean false-下载失败,否则输出下载文件
- */
- public function download($root, $id, $callback = null, $args = null){
- /* 获取下载文件信息 */
- $file = $this->find($id);
- if(!$file){
- $this->error = '不存在该文件!';
- return false;
- }
- /* 下载文件 */
- switch ($file['location']) {
- case 0: //下载本地文件
- $file['rootpath'] = $root;
- return $this->downLocalFile($file, $callback, $args);
- case 1: //TODO: 下载远程FTP文件
- break;
- default:
- $this->error = '不支持的文件存储类型!';
- return false;
- }
- }
- /**
- * 检测当前上传的文件是否已经存在
- * @param array $file 文件上传数组
- * @return boolean 文件信息, false - 不存在该文件
- */
- public function isFile($file){
- if(emptyempty($file['md5'])){
- throw new \Exception('缺少参数:md5');
- }
- /* 查找文件 */
- $map = array('md5' => $file['md5'],'sha1'=>$file['sha1'],);
- return $this->field(true)->where($map)->find();
- }
- /**
- * 下载本地文件
- * @param array $file 文件信息数组
- * @param callable $callback 下载回调函数,一般用于增加下载次数
- * @param string $args 回调函数参数
- * @return boolean 下载失败返回false
- */
- private function downLocalFile($file, $callback = null, $args = null){
- if(is_file($file['rootpath'].$file['savepath'].$file['savename'])){
- /* 调用回调函数新增下载数 */
- is_callable($callback) && call_user_func($callback, $args);
- /* 执行下载 */ //TODO: 大文件断点续传
- header("Content-Description: File Transfer");
- header('Content-type: ' . $file['type']);
- header('Content-Length:' . $file['size']);
- if (preg_match('/MSIE/', $_SERVER['HTTP_USER_AGENT'])) { //for IE
- header('Content-Disposition: attachment; filename="' . rawurlencode($file['name']) . '"');
- } else {
- header('Content-Disposition: attachment; filename="' . $file['name'] . '"');
- }
- readfile($file['rootpath'].$file['savepath'].$file['savename']);
- exit;
- } else {
- $this->error = '文件已被删除!';
- return false;
- } //phpfensi.com
- }
- /**
- * 清除数据库存在但本地不存在的数据
- * @param $data
- */
- public function removeTrash($data){
- //$this->where(array('id'=>$data['id'],))->delete();
- }
- }
4、修改调用上传类的代码
- public function ImgUpload()
- {
- //$this->error("没有文件!");
- //TODO: 用户登录检测
- /* 调用文件上传组件上传文件 */
- $Picture = D('Picture');
- $pic_driver = C('PICTURE_UPLOAD_DRIVER');
- $info = $Picture->upload(
- $_FILES,
- C('PICTURE_UPLOAD'),
- C('PICTURE_UPLOAD_DRIVER'),
- C("UPLOAD_{$pic_driver}_CONFIG")
- ); //TODO:上传到远程服务器
- /* 记录图片信息 */
- if($info){
- /* 返回JSON数据 */
- echo json_encode($info);
- } else {
- echo json_encode($info);
- }
- }
5、在客户端使用ajaxfileupload调用php方法
- //上传图片
- $(document).on('change','#upfile',function(){
- $.ajaxFileUpload({
- url:'{:U("Company/ImgUpload")}',
- secureuri:false,
- fileElementId:'upfile',
- dataType: 'json',
- type:'post',
- data: { fileElementId: 'upfile'},
- success: function (data) {
- $('#showimg').attr('src',data.upfile.url);
- $('#imageurl').val(data.upfile.url);
- }
- })
- })
这里最好使用json的数据类型进行传输.
Tags: Thinkphp3 2 七牛图片
相关文章
- ·ThinkPHP3.0略缩图不能保存到子目录(2013-12-03)
- ·ThinkPHP3.13新版使用体验(2014-04-12)
- ·ThinkPHP3.1新特性 多数据库操作的完善(2014-04-12)
- ·揭秘ThinkPHP3.1.2版本的独立分组功能(2014-04-12)
- ·thinkphp3.12安装出现这个问题的解决方法(2014-04-12)
- ·给thinkphp3.1案例blog添加一个删除的标签的方法(2014-04-12)
- ·ThinkPHP3.1.2整合UCenter详解(2014-04-12)
- ·ThinkPHP3.0中的一个快捷查询方法(|和&)(2014-04-12)
- ·ThinkPHP3.1教程新特性:动态设置自动完成和自动验证(2014-04-12)
- ·在thinkphp3中如何处理cookie数组(2014-04-12)
- ·ThinkPHP3.0中PHPMailer的使用(2014-04-12)
- ·THINKPHP3 静态缓存要素(2014-04-19)
- ·THINKPHP3 ajax无刷新分页类及实例(2014-04-19)
- ·关于THINKPHP3.0批量删除的设计思路和部分关键代码(2014-04-19)
- ·ThinkPHP3.0国际化配置方法(2014-04-19)
- ·thinkphp3.0 输出重复2次的解决方法(2014-04-19)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)