七牛图片上传方法我们只要在框架中配置它的接口及上传的些小细节就可以实现了,下面一起来看一个关于配置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
// +----------------------------------------------------------------------
// | OneThink [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
// | Copyright (c) 2013 http://www.onethink.cn All rights reserved.
// +----------------------------------------------------------------------
// | Author: huajie
// +----------------------------------------------------------------------
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(empty($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;
}
}
/**
* 清除数据库存在但本地不存在的数据
* @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的数据类型进行传输

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能

ZendStudio 13.5.1 Mac
功能强大的PHP集成开发环境

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),