欢迎大家访问我的博客 blog.ayla1688.cool


上代码之前,我想吐槽一下七牛云的DEMO, 写的确实不咋地。

废话不多说,咱们开始吧。

项目框架TP5.1 , 之前别人写了一点,懒得改七牛云的SDK目录,强迫症患者将就着看看吧,

qiniu的phpSDK 放在了vendor文件夹下。

1. 持久化处理上传及生成缩略图。 由于上传的图片较大 20M + , 所以采用了持久化处理上传,putfile  20M的图片是不让你上传的。

newFilename 就是保存在七牛云上的原图key,

oldFilePath 服务器上图片的地址,服务器缓存中的地址

persistentops :  对图片进行的操作,如果有多个操作则用 , 隔开。

persistentNotifyUrl 是异步返回的通知地址, 在这个方法中我们要进行的操作就是保存缩略图到服务器并删除七牛云上的缩略图。

完成的操作:设置了原图的key, 将原图保存后,生成 200*200的缩略图保存在七牛云。

private function uploadImgPost($newFilename, $oldFilepath){set_time_limit(0);$t1 = microtime(true);require_once APP_PATH . '/../vendor/qiniu/autoload.php';// 构建鉴权对象$auth = new Auth($this->accessKey, $this->secretKey);//生成保存文件的key$explode = explode(".", $newFilename);$thumbKey = $explode[0] . "_thumb" .".". $explode[1];$entry = $this->bucket .":". $thumbKey;$encodedEntryURI = \Qiniu\base64_urlSafeEncode($entry);$array = ['persistentOps'=>'imageView2/2/w/200/h/200/q/70/ignore-error/1/|saveas/'.$encodedEntryURI,        //处理方式  200*200 缩略图, 并保存缩略图'persistentNotifyUrl'=> url('appindex/Files/uploadImgNotify', '', true, true),];//生成上传Token$token = $auth->uploadToken($this->bucket, null, 3600, $array );// 初始化 UploadManager 对象并进行文件的上传$uploadMgr = new UploadManager();// 调用 UploadManager 的 putFile 方法进行文件的上传list($ret, $err) = $uploadMgr->putFile($token, $newFilename, $oldFilepath);if ($err !== null) {return ['code' => -1, 'msg' =>'上传失败'];} else {$t2 = microtime(true);file_put_contents('time.log', "七牛云上传时间:" . ($t2 - $t1) . "秒", FILE_APPEND );//返回图片的完整URL$newFilepath = $this->httpPre . $this->domain . "/" . $ret['key'];//保存在本地的缩略图$thumbUrl = $this->getThumbUrlFromQiniuKey($ret['key']);return ['code' => 1, 'msg' => '上传成功', 'data' => ['url'=> $newFilepath, 'previewUrl' => $thumbUrl]];}}

以下代码为异步方法

deleteFile 方法就不贴出来了,七牛云上有, 很简单。

最后返回一个json字符串的通知,否则多媒体队列会显示失败。

   /*** 上传图片后, 保存生成的缩略图到本地,并删除保存在空间中的缩略图* Function uploadImgNotify* @author mselect <445712421@qq.com>* @DateTime 2019/5/16*/public function uploadImgNotify(){$arr = $this->request->param();if( !empty($arr['code']) && $arr['code'] == 0 ){//成功$items = $arr['items'];$path = ROOT_PATH . $this->thumbSavePath;if(!is_dir($path)){mkdir($path, 0777, true);}foreach($items as $item){if(strpos($item['cmd'], 'saveas') !== false){//将资源下载,然后删除$url = $this->httpPre . $this->domain . '/' . $item['key'];$back = file_put_contents($path . $item['key'] , file_get_contents($url));if($back <=0 ){unlink($path . $item['key']);}else {//将七牛云上的缩略图文件删除$this->deleteFile($item['key']);}}}$resp = array('ret' => 'succeed');}else {$resp = array('ret' => 'failed');}return json($resp);}

2. 多文件打包zip 下载

keys 是保存了所有要打包的文件的key 数组

zipKey 为保存在七牛云上的压缩包key

完成工作: 将keys数组中的所有文件打包成zip , 保存在七牛云上,异步通知方法将压缩包下载。

pipeline 为自己创建的多媒体队列名称

key = test.zip  这个是个坑, 这个文件是个默认文件,你需要上传一个test.zip (随便上传一个很小的压缩包)到七牛云。

    /**** 将作品的中所有水印图片压缩成zip下载* Function mkzip* @author mselect <445712421@qq.com>* @DateTime 2019/5/13* @param $keys       array      要压缩的文件*/public function mkzip($keys, $zipKey){require_once APP_PATH . '/../vendor/qiniu/autoload.php';$auth = new Auth($this->accessKey, $this->secretKey);$pipeline = 'mkzip';$key =  "test.zip"; //d5b37d559fbec90b0cdc_water$pfop = new PersistentFop($auth, null);$fops = 'mkzip/2';foreach($keys as $value){$fops .= '/url/' . \Qiniu\base64_urlSafeEncode($value);}$zipKey = $zipKey . ".zip";$fops .= '|saveas/' . \Qiniu\base64_urlSafeEncode($this->bucket . ":" . $zipKey);$notify_url = url('appindex/Files/mkzipNotify', '', true, true);$force = false;list($id, $err) = $pfop->execute($this->bucket, $key, $fops, $pipeline, $notify_url, $force);file_put_contents('imgwater.log', "处理队列ID: $id , 回调地址:$notify_url \r\n", FILE_APPEND);if($err !==null){return ['code' => -1, 'msg' => '打包失败了'];}else {//轮询队列执行完成后才返回while(true){$url = "http://api.qiniu.com/status/get/prefop?id=" . $id;$json = file_get_contents($url);$arr = json_decode($json, true);if($arr['code'] == 0 ){break;}else if($arr['code'] == 3 || $arr['code'] == 4){file_put_contents('imgwater.log', $arr['desc'] . "\r\n", FILE_APPEND);return ['code' => -1, 'msg'=> $arr['desc']];}}return ['code' => 1, 'msg' => '压缩成功', 'data' => ['fileKey' => $this->httpPre . $this->domain . "/" . $zipKey]];}}

下载压缩包的方法与

以上异步通知方法类似,不再赘述。

欢迎访问: http://www.kevink.club 查看更多内容

以上方法如有问题,请及时联系我

七牛云持久化上传图片及生成缩略图,多文件打包下载相关推荐

  1. 在ASP.NET中上传图片并生成缩略图

    在ASP.NET中上传图片并生成缩略图,可以参照下列代码: private void btnUploadPicture_Click(object sender, System.EventArgs e) ...

  2. flask上传图片以及生成缩略图

    flask在开发微信公众号或者小程序时会涉及到手机端上传图片以及生成缩略图的需求(注意,一般涉及到图文都是把图片和文字分开储存到两张表中,用外键作为连接) 第一步, 将本地图片上传 1.前端模板: & ...

  3. linux 批量选中文本删除,教程 | 【七牛云】Qshell Linux下批量删除文件教程

    原标题:教程 | [七牛云]Qshell Linux下批量删除文件教程 项目内容 本文将教您使用七牛云提供的Qshell工具在linux下安装并且使用批量查询和批量删除命令行进行远程删除文件. 项目教 ...

  4. 使用七牛云进行上传图片

    上传图片的过程 点击上传图片按钮,选择要上传的图片,然后发起同步请求,springmvc调用了一个内部的类文件上传解析器去请求体拿文件,封装到MultipartFile中,然后结合七牛云的官方文档写s ...

  5. js生成token 七牛云_自己尝试生成七牛云的accessToken,但一直返回{error:bad token}...

    这是我写的请求代码 var utils = require('./common/utils'); var http = require('http'); // var str = crypto.cre ...

  6. C# webform上传图片并生成缩略图

    其实里面写的很乱,包括修改文件名什么的都没有仔细去写,主要是想记录下缩略图生成的几种方式 ,大家明白就好! 1 void UpImgs() 2 { 3 if (FileUpload1.HasFile) ...

  7. 关于asp.net上传图片自动生成缩略图

    /// <summary>     /// 生成缩略图     /// </summary>     /// <param name="fileName&quo ...

  8. php 上传图片并生成缩略图,php 上传图片并生成缩略图

    if ($_FILES['file']['error'] == 0) {$MAX_FILE_SIZE = 300000;if ($_FILES['file']['size'] > $MAX_FI ...

  9. 如何用七牛云上传音乐生成外链

    收费的,不推荐使用,可以使用又拍云储存+CDN,再去申请又拍云联盟,一个月10g储存空间+15g流量,基本够用了 1.注册七牛云 2.新建对象储存 3.绑定自己的cdn域名 必须要备过案的域名 免费提 ...

  10. 利用七牛云如何上传图片制作外链?

    七牛云网站地址:https://portal.qiniu.com/signin 一:为什么要用七牛云制作图片外链? 外链简单的说就是网站外部的链接即一个网站的外部所有指向该网站的链接,不管是锚文字链接 ...

最新文章

  1. 【Python】zip函数
  2. Docke的WEB管理工具
  3. Flash/Flex学习笔记(30):不用startDrag和stopDrag的对象拖动
  4. HBA driver for linux
  5. 7个CSS你可能不知道的技巧
  6. 简单地使用webpack进行打包,一些常见打包错误
  7. 放弃治疗式宣传?Kindle官方自我调侃:盖Kindle 面更香
  8. nginx引入自定义的配置文件
  9. easyui的下拉框combobox在包含的iframe页面里点击不能收回解决办法
  10. devexpress html编辑器,DevExpress 通用控件系列:TextEdit(2)
  11. 【数据结构笔记10】二叉树的先序、中序、后序遍历,中序遍历的堆栈/非递归遍历算法,层序遍历,确定一个二叉树,树的同构
  12. 2、Modelsim使用教程
  13. pyhive ModuleNotFoundError: No module named ‘thrift‘
  14. 如何查看本机IP及端口
  15. 好好搭搭机器人编程视频_机器人编程搭建 | 乐创世界学员作品展示第4期!
  16. 大数据必备技能_大数据需要具备的5种必备技能
  17. tensorflow.js在nodejs训练猫狗分类模型在浏览器上使用
  18. MATLAB函数——atan(x)和atan2(x)的区别
  19. 性能测试方案与性能测试报告目录导航
  20. AR发展简史(未完待续)

热门文章

  1. 计算机主机自动关机如何设置,如何设置电脑自动关机
  2. 在GraphPad Prism Mac中处理多份文件
  3. 中文转换为拼音插件guiHz2Py
  4. 使用Vulkan画三角形
  5. 如何建设网站才有利于网站优化
  6. 网站优化相关理论概述
  7. glsl中uniform,attribute和varying详解
  8. migration php,PHP日记——Lavarel常用语句之Migration篇
  9. Js-函数作用域和块作用域
  10. 设置hr标签的粗细及颜色