Express.js中的对象存储

777 阅读3分钟

对象存储作为现代云存储的方式之一,目前大规模运用于各类静态资源的存储,如:音视频、图像、文本、PDF文件以及各类非结构性数据。 比起传统的本地服务器存储和block存储,云端提供的对象存储则更加动态和便捷。

什么是对象存储

在现代云计算的时代,对象存储是指通过HTTP通信,存储和检索非结构性的元数据和数据blobs.它和传统的计算机文件系统进行 块存储(block storage) 不同,它要处理的是整个对象的存储,如:图像,日志等。它之所以叫做非结构性存储是因为器不存在传统数据库概念中的schema或format.

之所以对象存储能够快速流行是由于其极其简单的开发体验。由于API是由标准的API和库所组成,存储a blob of data只需调用HTTP PUT方法,而在检索文件和元数据只需调用GET方法。除此之外,一般情况下对象存储服务还向用户提供公开提供资源,对于用户而言省去了维护静态资源服务器的成本。

一般情况下,对象存储服务商只会按照存储空间的大小收取费用,对于很多小型开发者来说省去了大量的开发成本。

对象存储的优势:

  • HTTP API,对于不同的操作系统和编程语言具有很强的兼容性
  • 根据使用量的收费模式节约基础架构费用
  • 对象存储服务本身就是一个静态资源服务器,对于运维而言就减少了一个运维服务成本
  • 对象存储服务商一般会提供CDN服务,优化加载速度。

对象存储的劣势:

  • 对象存储是无法替代传统数据库,因为其存在较高的延迟性
  • 对象存储不允许开发者修改某个对象中一小片数据,如果是读写必须是整个对象的读写,所以对象存储适用的对象只能是那些不常修改的对象。

详情请阅读block storage和object storage的区别

云服务商接口

目前大部分的云服务提供商都提供了相关的SDK,本文将讲解腾讯云SDK。本文的目标也是在于成功创建一个支持Simple Storage Service(S3) API的上传服务器。

腾讯云

在创建成功后在界面中可以看到空间名称Bucket地域名称Region,然后在你的控制台中申请API KEY,获取SecretIdSecretKey.

var COS = require('cos-nodejs-sdk-v5');

var cos = new COS({
    SecretId: 'AKIDpjXxxxxxxx,
    SecretKey: 'fL8lCyyyyyy3gnllly'
});

router.post('/upload',upload.single('file'),(req,res)=>{
    const tempPath = req.file.path;
    var currentTime = new Date().getTime();
    let {userId} = req.query;
    cos.sliceUploadFile({
        Bucket: 'your Bucket',
        Region: 'your regison,such as: ap-shanghai',
        Key: `/product/${userId}/${currentTime}.jpg`,
        FilePath: tempPath
        }, (err, data)=> {
       
        if(err){
            res.status(403).send({success:false,reason:err});
        }else{
            console.log(data);
            res.send({success:true,location:data.Location});
        }   
    });
})

这样一个简单express.js对象存储的上传功能就做好了