NodeJs批量下载“百度云存储(BCS)”的所有文件

导语

NodeJs 是一个使用 V8 JS 引擎的服务器端编程语言。百度云存储的英文缩写是 BCS ,是百度开发者中心提供的云存储服务。 本文阐述利用官方提供的 RESTful API 将 BCS 上的文件批量按源路径下载并保存下来的一种方法。需要安装了 NodeJs

获取签名

首先通过官方的 URL 签名界面取得签名,在 BAE 3.0 的“管理开发者服务”界面中,点击左侧的“云存储”,再选择一个 Bucket ,再点击“URL签名”,如下图所示。 [caption id=”attachment_1208” align=”alignnone” width=”444”]百度云存储(BCS)官方生成签名界面截图 百度云存储(BCS)官方生成签名界面截图[/caption] 点击“签名”按钮,即可得到一个像 http://bcs.duapp.com/**bucket**?sign=**xxx** 的地址。其中 bucket 是你的 bucket 名, xxx 就是签名字符串。

依赖的 NodeJs 模块

本文使用到 NodeJs 内置的文件系统模块和 GitHub 上的 request 模块。request 是 NodeJs 实现的 curl ,先安装 request。 npm install request

NodeJs 代码

1.引入依赖的模块

var fs = require('fs'); request = require('request');

2.声明签名字符串,会多次用到

var sign = '**你的签名字符串**';

3.自动创建不存在的目录

由于 fs 创建文件时无法自动创建目录,需要手动检查目录是否存在,若不存在就创建,所以需要自己编写一个。 var MKDirIfNotExist = function(filePN){ var dirArr = filePN.split('/'), cPath = ''; for(var i = 0, len = dirArr.length; i < len; i ++){ if(dirArr[i]) { cPath += dirArr[i]; var exists = fs.existsSync(cPath); if(!exists){ fs.mkdirSync(cPath); } cPath += '/'; } } } 函数的作用是传入代表目录地址的字符串,若脚本运行目录下不存在该字符串表示的路径,则创建。

4.读取 RESTful API 的文件列表和内容并保存本地

这里终于切入了正题。生成签名那里生成的 RESTful API 地址直接可以列出最多 200 个 Bucket 上的文件及其路径,可以直接读取并下载它们。 request('http://bcs.duapp.com/**你的bucket名**?sign=**你的签名字符串**', function (error, response, body) { if (!error && response.statusCode == 200) { var bodyJSON = JSON.parse(body); for(var i = 0, len = bodyJSON.object_total; i < len; i ++){ if(bodyJSON.object_list[i].is_dir == '0'){ MKDirIfNotExist(bodyJSON.object_list[i].parent_dir); fs.openSync('./' + bodyJSON.object_list[i].object, "w"); request('http://bcs.duapp.com/**你的bucket名'+ bodyJSON.object_list[i].object + '?sign=' + sign).pipe(fs.createWriteStream('./' + bodyJSON.object_list[i].object)); }} } });** 注意因为是顺序执行,所以这里用的都是 Sync 版的 fs 函数。 由于本人的 BCS 里总文件个数不到 200 个,所以没有给 RESTful API 传更多的参数,要求分页传回更多的文件信息。

5.完成

将本节所有代码按顺序复制粘贴另存为后缀是 .js 的文本文件,修改成你自己的信息后,直接运行 node **你的文件名** 运行完就会看到所有文件都在那了。

参考文档