node上传文件或者整体文件夹到阿里OSS服务器流程

官网介绍:OSSnode上传文件

node上传文件功能首先需要开权限,即拥有上传到服务器的权限,及对应的ID和secret,下面是OSS官网中介绍的node上传文件到OSS服务器的步骤

let OSS = require('ali-oss')

let client = new OSS({
  region: '<Your region>',
  accessKeyId: '<Your AccessKeyId>',
  accessKeySecret: '<Your AccessKeySecret>',
  bucket: 'Your bucket name'
});

async function put () {
  try {
    let result = await client.put('object-name', 'local-file');
    console.log(result);
  } catch (e) {
  	console.log(er);
  }
}

put();

client是node对OSS服务器操作的必须品,所以格式一定要写对,才可以使用OSS服务器的一些功能

var client = new OSS({
    region: 'oss-cn-beijing',//地域节点
    accessKeyId: '*********',
    accessKeySecret: '*******************',
    bucket: 'hahaha'//域名
});

部分region,region项填入Region英文表示,详细见访问域名和数据中心

Region中文名称 Region英文表示 外网Endpoint 外网支持HTTPS ECS访问的内网Endpoint 内网支持HTTPS
华东 1 oss-cn-hangzhou oss-cn-hangzhou.aliyuncs.com oss-cn-hangzhou-internal.aliyuncs.com
华东 2 oss-cn-shanghai oss-cn-shanghai.aliyuncs.com oss-cn-shanghai-internal.aliyuncs.com
华北 1 oss-cn-qingdao oss-cn-qingdao.aliyuncs.com oss-cn-qingdao-internal.aliyuncs.com
华北 2 oss-cn-beijing oss-cn-beijing.aliyuncs.com oss-cn-beijing-internal.aliyuncs.com
华北 3 oss-cn-zhangjiakou oss-cn-zhangjiakou.aliyuncs.com oss-cn-zhangjiakou-internal.aliyuncs.com
华北 5 oss-cn-huhehaote oss-cn-huhehaote.aliyuncs.com oss-cn-huhehaote-internal.aliyuncs.com
华南 1 oss-cn-shenzhen oss-cn-shenzhen.aliyuncs.com oss-cn-shenzhen-internal.aliyuncs.com

 Bucket是OSS上的命名空间,权限控制、日志记录等高级功能的管理实体;Bucket名称在整个OSS服务中具有全局唯一性,且不能修改;存储在OSS上的每个Object必须都包含在某个Bucket中。

可以看出官网给出的仅仅只有上传单个文件的功能,上传整体文件夹并没有提及,而且是路径上传,所以要上传整个文件夹,需要找到所以的文件,然后上传各自的路径就可以了

async function putOSS (src,dist) {
    try {
        let result = await client.put(dist, src);
        console.log(result);
    } catch (e) {
        console.log(e);
    }
}
function addFileToOSSSync(src,dist){
    var docs = fs.readdirSync(src);
    docs.forEach(function(doc){
        var _src = src + '/' + doc,
            _dist = dist + '/' + doc;
        var st = fs.statSync( _src);
            // 判断是否为文件
        if( st.isFile()&&doc!=='.DS_Store' ){
            putOSS(_src,_dist);
            // console.log(_src+'是文件',_dist)
        }
        // 如果是目录则递归调用自身
        else if( st.isDirectory() ){
            // console.log(_src+'是文件夹')
            addFileToOSSSync( _src,_dist);
        }
    })
}
addFileToOSSSync(global.glopwd + "/File/dist",'hahaha')

整体思路就是用回调的方式找出所有文件,然后上传到服务器,但是找出所有的文件就必须用到递归,判断是否为文件夹,如果为文件夹再去找文件夹下的所有文件,最后所有找到文件之后,每个文件单独使用官网提供的putOSS函数上传就可以了

需要注意的是上传服务器的路径问题,OSS是没有路径概念的,但是由虚拟路径去模拟的,所以上传一个文件到服务器中

putOSS (src,'haha/zz.zip') 
putOSS (src,'haha/heihei/zz.zip') 

这两种都可以上传,但是对应的虚拟路径在被访问时会转换为真实路径,所以要上传整个文件夹时,虚拟路径的层级关系千万要对应好!否则相互依赖的两个文件就会访问不到

猜你喜欢

转载自blog.csdn.net/zuggs_/article/details/84768489
今日推荐