最近有一个图片站,无奈之下选择了对象存储。
在看了官方文档后,终于写出了自己需要的东西,现在做一下总结!
七牛云的对象存储如何上传文件?
首先在项目里面引入官方提供的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.php
和common.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
暂无评论内容