为什么使用存储桶
博主需要完成一个文件预览的功能,没想到React没有插件,可能是PPT、Word的版权问题,pdf就有viewer之类的包。也试了一下微软的,不太好用,很久没维护了,因此选择了腾讯云的存储桶,可以白嫖一波,50GB 6个月。
使用前的准备
服务开通
开通存储桶服务
腾讯云 存储桶
点击立即使用即可,会跳转至概览
开通数据万象服务
腾讯云-数据万象
数据万象服务能够进行文档预览,点击立即使用,进行开通
或者在存储桶放入文件,点击预览会引导你开通数据万象服务
JDK安装
代码语言:text复制npm i cos-nodejs-sdk-v5 --save
使用
创建存储桶对象
代码语言:javascript复制const cos = new COS({
SecretId: process.env.SECRETID,
SecretKey: process.env.SECRETKEY
});
在.env中填写SecretID与SecretKey,如下图所示
代码语言:shell复制SECRETID: "AKIDgAPO6XhaCXcPvA8qITN0MRFn32kBMFsE",
SECRETKEY: "7xPaV9VaOwDExQcXBYeT1II0SdYBXcQx",
这里其实设计的不太好,没必要是必填项,因为我写的代码只有读,又设置的公有读,所以根本不需要SecretID和SecretKey
文档列表
列出所有文档
代码语言:javascript复制var listFolder = function(marker) {
cos.getBucket({
Bucket: 'examplebucket-1250000000', /* 填入您自己的存储桶,必须字段 */
Region: 'COS_REGION', /* 存储桶所在地域,例如ap-beijing,必须字段 */
Prefix: 'a/', /* Prefix表示列出的object的key以prefix开始,非必须 */
Marker: marker,
MaxKeys: 1000,
}, function(err, data) {
if (err) {
return console.log('list error:', err);
} else {
console.log('list result:', data.Contents);
if (data.IsTruncated === 'true') listFolder(data.NextMarker);
else return console.log('list complete');
}
});
};
listFolder();
通过/分割,放到数组里即可,之后获取封面和预览时遍历数组,获得ObjectKey即可。
文档封面
代码语言:javascript复制GET /<ObjectKey>?ci-process=doc-preview&page=<page>&srcType=<srcType>&ImageParams=<ImageParams> HTTP/1.1
Host: <BucketName-APPID>.cos.<Region>.myzijiebao.com
Date: GMT Date
Authorization: Auth String
将response作为img标签的src即可
文档预览
代码语言:javascript复制GET /<ObjectKey>?ci-process=doc-preview&dstType=html HTTP/1.1
Host: <BucketName-APPID>.cos.<Region>.myzijiebao.com
Date: GMT Date
将reponse作为iframe的src即可
吐槽一下:腾讯的COS,某些语言的SDK不支持tag,只能调用API :(
参考
腾讯云Node.js的JDK
列出文档对象
下载对象
文档封面图片
文档转HTML
原文:https://blog.csdn.net/work_harder999/article/details/124279206