七牛云的对象存储PHP如何上传文件?上传文件的时候如何对图片进行压缩?

最近有一个图片站,无奈之下选择了对象存储。

在看了官方文档后,终于写出了自己需要的东西,现在做一下总结!

七牛云的对象存储如何上传文件?

首先在项目里面引入官方提供的SDK文件。

然后PHP引入,直接写代码,由于业务的保密性所以我只公开上传部分的代码!

<?php
require './vendor/autoload.php';
require('../action/class/common.php');

$file = glob('./up/*.png');

$filename = basename($file[0]);
$locfile  = $file[0];
$yunfilenam = 'score/'.$filename;

use Qiniu\Auth;
 // 引入上传类
use Qiniu\Storage\UploadManager;
  // 用于签名的公钥和私钥
$accessKey = '';
$secretKey = '';
$bucket = '';
  // 初始化签权对象
$auth = new Auth($accessKey, $secretKey);
// 计算文件大小,生成压缩率
$filesize = filesize($locfile); // 获取文件大小,单位为字节
$targetSize = 100 * 1024;
if ($filesize < 100 * 1024 && $filesize > 80 * 1024) {
    $water = 75; // 文件小于100KB,设置$water为75
} else {
    $water = intval(($targetSize / $filesize) * 100); 
}

$expires = 3600;
//持久化数据处理的上传凭证
$saveJpgEntry = \Qiniu\base64_urlSafeEncode($bucket . ":{$yunfilenam}");
$vframeJpgFop = "imageView2/0/format/jpg/q/{$water}|imageslim|saveas/" . $saveJpgEntry;
$policy = array(
    'scope' => $bucket . ':' . $filename,
    'persistentOps' => $vframeJpgFop,
    'insertOnly'    => 0,
    'persistentPipeline' => "",
);
$token = $auth->uploadToken($bucket, null, $expires, $policy, true);

// print_r($token);die;
// 初始化 UploadManager 对象并进行文件的上传。
$uploadMgr = new UploadManager();
// 调用 UploadManager 的 putFile 方法进行文件的上传。
list($ret, $err) = $uploadMgr->putFile($token, $yunfilenam, $locfile, null, 'application/octet-stream', true, null, 'v2');
echo "\n====> putFile result: \n";
if ($err !== null) {
    var_dump($err);
} else {
    var_dump($ret);    
}

代码解读:

这段代码是一个PHP脚本,首先引入了两个类库文件:autoload.phpcommon.php,这些类库文件可能实现了一些基础功能。然后使用glob()函数选择了./up/目录下的所有.png文件,选取其中第一个文件的文件名并保存到变量$filename中。

接下来通过七牛云的SDK实现了图片的上传。首先需要准备好七牛云的访问密钥、空间名等信息,然后初始化Auth对象,生成上传凭证$token。根据文件大小,设置了压缩率$water,并将上传参数封装到了数组$policy中,包括空间名、文件名、持久化数据处理等。最终调用UploadManager对象的putFile()方法进行文件上传,并根据返回结果判断是否上传成功。如果成功,将文件名插入到MySQL数据库中,并将文件从./up/目录移动到./bak/目录并输出操作结果。

总之,这段代码的功能是将./up/目录下的第一个.png文件上传到七牛云空间中并进行压缩处理,同时将文件名插入到MySQL数据库中,最终将文件移动到./bak/目录。

上传文件的时候如何对图片进行压缩?

在上面的代码中:

$expires = 3600;
//持久化数据处理的上传凭证
$saveJpgEntry = \Qiniu\base64_urlSafeEncode($bucket . ":{$yunfilenam}");
$vframeJpgFop = "imageView2/0/format/jpg/q/{$water}|imageslim|saveas/" . $saveJpgEntry;
$policy = array(
    'scope' => $bucket . ':' . $filename,
    'persistentOps' => $vframeJpgFop,
    'insertOnly'    => 0,
    'persistentPipeline' => "",
);

这个部分就是对图片进行处理的部分,压缩图片,并且覆盖图片。

© 版权声明
THE END
喜欢就支持一下吧
点赞15
相关推荐
评论 抢沙发

请登录后发表评论

    暂无评论内容