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外网支持HTTPSECS访问的内网Endpoint内网支持HTTPS
华东 1oss-cn-hangzhouoss-cn-hangzhou.aliyuncs.comoss-cn-hangzhou-internal.aliyuncs.com
华东 2oss-cn-shanghaioss-cn-shanghai.aliyuncs.comoss-cn-shanghai-internal.aliyuncs.com
华北 1oss-cn-qingdaooss-cn-qingdao.aliyuncs.comoss-cn-qingdao-internal.aliyuncs.com
华北 2oss-cn-beijingoss-cn-beijing.aliyuncs.comoss-cn-beijing-internal.aliyuncs.com
华北 3oss-cn-zhangjiakouoss-cn-zhangjiakou.aliyuncs.comoss-cn-zhangjiakou-internal.aliyuncs.com
华北 5oss-cn-huhehaoteoss-cn-huhehaote.aliyuncs.comoss-cn-huhehaote-internal.aliyuncs.com
华南 1oss-cn-shenzhenoss-cn-shenzhen.aliyuncs.comoss-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') 

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

可以通过以下步骤实现: 1. 安装阿里Node.js SDK。 在 Node.js 环境下,可以使用阿里Node.js SDK 实现阿里云服务的访问。可以使用以下命令安装: ```bash npm install --save @alicloud/pop-core ``` 2. 在阿里云上创建 OSS 存储空间。 可以在阿里OSS 控制台中创建一个存储空间,用于存储上传的文件。 3. 在 Vue.js 中使用 Electron 的文件选择器选择文件夹。 可以使用 Electron 的 dialog 模块提供的 showOpenDialog 方法选择文件夹。具体可以参考以下代码: ```javascript const { dialog } = require('electron') dialog.showOpenDialog({ properties: ['openDirectory'] }).then(result => { console.log(result.filePaths) }).catch(err => { console.log(err) }) ``` 4. 遍历文件夹内的文件并上传到阿里OSS。 可以使用 Node.js 的 fs 模块遍历文件夹内的文件,并使用阿里Node.js SDK 将文件传到 OSS 中。具体可以参考以下代码: ```javascript const fs = require('fs') const path = require('path') const Core = require('@alicloud/pop-core') const client = new Core({ accessKeyId: '<your-access-key-id>', accessKeySecret: '<your-access-key-secret>', endpoint: '<your-oss-endpoint>', apiVersion: '2013-10-15' }) // 遍历文件夹内的文件并上传到阿里OSS function uploadFilesToOSS(folderPath, bucketName) { fs.readdir(folderPath, (err, files) => { if (err) { console.log(err) return } files.forEach(file => { const filePath = path.join(folderPath, file) fs.stat(filePath, (err, stats) => { if (err) { console.log(err) return } if (stats.isFile()) { const fileName = path.basename(filePath) // 上传文件阿里OSS client.request('PutObject', { Bucket: bucketName, Key: fileName, Body: fs.createReadStream(filePath) }, (err, result) => { if (err) { console.log(err) return } console.log(`Uploaded ${fileName} to ${bucketName}`) }) } else if (stats.isDirectory()) { uploadFilesToOSS(filePath, bucketName) } }) }) }) } ``` 在以上代码中,`<your-access-key-id>` 和 `<your-access-key-secret>` 需要替换为你的阿里云访问密钥 ID 和访问密钥 Secret,`<your-oss-endpoint>` 需要替换为你的 OSS 服务的 endpoint,`uploadFilesToOSS` 方法需要传入文件夹路径和存储空间名称。 5. 在 Vue.js 中使用 Electron 的 IPC 模块与主进程通信。 在 Vue.js 中,可以使用 Electron 的 IPC 模块与主进程通信,将文件夹路径和存储空间名称传递给主进程。具体可以参考以下代码: ```javascript const { ipcRenderer } = require('electron') ipcRenderer.send('upload-files-to-oss', folderPath, bucketName) ``` 在以上代码中,`'upload-files-to-oss'` 是自定义的事件名称,`folderPath` 和 `bucketName` 分别是文件夹路径和存储空间名称。 6. 在 Electron 的主进程中监听 IPC 事件并调用上传方法。 在 Electron 的主进程中,可以监听 `'upload-files-to-oss'` 事件,并调用上传方法。具体可以参考以下代码: ```javascript const { ipcMain } = require('electron') ipcMain.on('upload-files-to-oss', (event, folderPath, bucketName) => { uploadFilesToOSS(folderPath, bucketName) }) ``` 至此,通过 electron 和 vue 将 Windows 下文件夹文件传到阿里服务器流程就完成了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值