
Security News
Crates.io Users Targeted by Phishing Emails
The Rust Security Response WG is warning of phishing emails from rustfoundation.dev targeting crates.io users.
cloud-upload-hub
Advanced tools
一个轻量级的前端多云存储上传工具,支持阿里云 OSS、腾讯云 COS 等云存储服务,提供统一的接口和灵活的配置选项。
这个库的目的是通过简洁的 API,开发者可以轻松集成多个云平台的文件上传功能,无需重复实现不同平台的逻辑。
index.html
,通过最后一个生效文件,解决资源无序上传带来的页面资源加载失败。npm install cloud-upload-hub --save-dev
# 基础用法
cloud-upload-hub --source=dist --target=my-project --ossCredentials=./config/oss.conf.json
# 使用配置文件
cloud-upload-hub --config=./uploader.config.js --mode=test
或根目录下
cloud-upload-hub --mode=test
或者在package.json中:
"scripts": {
"uploader:test": cloud-upload-hub --mode=test
},
执行
npm run uploader:test
创建 uploader.config.js
:通过配置文件集中管理上传参数。这种方式适合长期项目或需要频繁上传的场景。
配置示例:
const defineConfig = ({ mode }) => {
return {
source: 'src', // 上传源路径
target: gettarget(mode), // 上传目标路径,根据 mode 动态获取
retryLimit: 5, // 重试次数
maxConcurrent: 20, // 最大并发量
lastFile: 'index.html', // 最后一个文件
ossCredentials: './config/oss.tice.conf.json', // OSS 配置文件(密钥)
cosCredentials: async () => ({ // COS 配置
SecretId: 'xxx',
SecretKey: 'xxx'
...
}),
uploaderModules: [], // 自定义上传模块路径或注入函数
onUploadSuccess(status) {
console.log('上传成功:', status);
},
onUploadFail(status) {
console.error('上传失败:', status);
}
};
};
export default defineConfig;
以下是常用参数及其说明:
参数名 | 说明 | 是否必传 | 命令行支持 | 配置文件支持 |
---|---|---|---|---|
source | 指定要上传的本地目录或文件路径,例如 dist 。 | 是 | 是 | 是 |
target | 上传到 OSS 或 COS 的目标路径,例如 projectName/test 。 | 是 | 是 | 是 |
ossCredentials | 阿里云 OSS 配置文件路径(JSON 格式),需包含 bucket 、accessKeyId 、accessKeySecret 和 region 。 | 在没有配置uploaderModules 时,ossCredentials 与cosCredentials 二选一必传 | 是 | 是 |
cosCredentials | 腾讯云 COS 配置,支持异步获取,需返回 SecretId 和 SecretKey 。 | 在没有配置uploaderModules 时,ossCredentials 与cosCredentials 二选一必传 | 是 | 是 |
retryLimit | 最大重试次数(默认为5),在上传失败时进行重试。 | 否 | 是 | 是 |
maxConcurrent | 并发上传数量限制(默认为10),控制同时上传的文件数量。 | 否 | 是 | 是 |
lastFile | 最后上传的文件(默认 index.html ),指定上传顺序中的最后文件。 | 否 | 是 | 是 |
uploaderModules | 自定义上传模块配置,可以加载其他上传逻辑。 | 否 | 是 | 是 |
onUploadSuccess | 上传成功的回调函数,接收上传状态。 | 否 | 否 | 是 |
onUploadFail | 上传失败的回调函数,接收失败状态。 onUploadFail(status<1:资源上传前;2:资源文件上传过程中;3:生效文件上传过程中;4:加载配置文件; 0: 未知错误>, message) | 否 | 否 | 是 |
uploader.config.js 支持三种模式:
ossCredentials: './config/oss.tice.conf.json',
ossCredentials: {
SecretId: 'xxx', // COS的秘密ID
SecretKey: 'xxx', // COS的秘密密钥
...
},
ossCredentials: async () => {
const response = await fetch('your-api');
return response.json();
}
可以通过 uploaderModules
参数动态加载特定的上传器(除 OSS 和 COS 之外)配置文件,以满足不同的上传需求。
该参数为 JSON 格式数组,可以包含多个配置文件路径或函数。
uploaderModules: [ // 自定义上传路径 或者 注入函数
"./example/uploaderRegistryOSS.js",
async () => {
// 1、extend BaseUploader
// 2、registerUploader
// 具体代码参考 uploaderRegistryOSS.js
}
]
2、 自定义文件配置
uploaderRegistryOSS.js
// 代码例子,可按照下面的代码进行修改。(代码就按照这个复制、粘贴,改改)
/*
"scripts": {
"uploaderRegistryOSS:tice": "cloud-upload-hub --source=src --target=test/sailing --uploaderModules='[\"./example/uploaderRegistryOSS.js\"]' --ossCopyConfig=./config/oss.tice.conf.json"
},
*/
const OSS = require('ali-oss')
const { BaseUploader, registerUploader } = require('cloud-upload-hub');
class UploadCopyOss extends BaseUploader {
constructor(options) {
super(options); // 调用基类构造函数
this.client = new OSS({
region: options.region,
accessKeyId: options.accessKeyId,
accessKeySecret: options.accessKeySecret,
bucket: options.bucket,
});
this.headers = options.headers || {}; // 选填
}
// 实际的文件上传函数
async uploadSingleFile(file, target) {
try {
const result = await this.client.put(target, file, {
headers: this.headers, // 选填
});
return {
success: result?.res?.status === 200, // 必填字段
status: result?.res?.status, // 必填字段
// message: `文件 ${file} 上传成功到 ${target}`, 默认: `${file} -> ${target}` // 选填
// extra: result, // 选填
};
} catch (error) {
return {
success: false, // 必填字段
message: error.message, // 必填字段
};
}
}
}
// 设置 OSS 上传器
registerUploader(UploadCopyOss, {
configName: 'ossCopyConfig', // 配置文件名,与命令行对应, 必填
configRequiredFields: ['bucket', 'accessKeyId', 'accessKeySecret', 'region'], // 必填
// headerName: 'ossCopyHeaders', // 头部配置, 选填
type: 'ossCopy', // 上传器类型, 必填
})
在配置文件中,可以通过 mode
参数来指定不同的上传目标:
"scripts": {
"uploader:tice": "cloud-upload-hub --mode=tice"
}
在配置中定义 onUploadSuccess
和 onUploadFail
回调函数,处理相应的事件:
onUploadSuccess(status) {
console.log('构建成功', status);
},
onUploadFail(status) {
console.log('构建失败', status);
},
====== 共扫描了7个文件,开始上传资源文件。 ======
OSS资源文件,开始上传...
[OSS][SUCCESS][1/7]: src/.DS_Store -> test/sailing/src/.DS_Store
[OSS][SUCCESS][2/7]: src/upload/cosUpload.js -> test/sailing/src/upload/cosUpload.js
[OSS][SUCCESS][3/7]: src/main.js -> test/sailing/src/main.js
[OSS][SUCCESS][4/7]: src/upload/ossUpload.js -> test/sailing/src/upload/ossUpload.js
[OSS][SUCCESS][5/7]: src/utils/tasks.js -> test/sailing/src/utils/tasks.js
[OSS][SUCCESS][6/7]: src/utils/file.js -> test/sailing/src/utils/file.js
OSS资源文件,上传完成。
COS资源文件,开始上传...
[COS][SUCCESS][1/7]: src/main.js -> test/sailing/src/main.js
[COS][SUCCESS][2/7]: src/.DS_Store -> test/sailing/src/.DS_Store
[COS][SUCCESS][3/7]: src/upload/cosUpload.js -> test/sailing/src/upload/cosUpload.js
[COS][SUCCESS][4/7]: src/utils/tasks.js -> test/sailing/src/utils/tasks.js
[COS][SUCCESS][5/7]: src/utils/file.js -> test/sailing/src/utils/file.js
[COS][SUCCESS][6/7]: src/upload/ossUpload.js -> test/sailing/src/upload/ossUpload.js
COS资源文件,上传完成。
====== 开始上传生效文件。 ======
OSS生效文件,开始上传...
[OSS][SUCCESS][7/7]: src/index.html -> test/sailing/src/index.html
OSS生效文件,上传完成。
COS生效文件,开始上传...
[COS][SUCCESS][7/7]: src/index.html -> test/sailing/src/index.html
COS生效文件,上传完成。
====== 全部文件上传成功(7个) ======
FAQs
支持将文件同时上传至单个或者多个云存储服务,当前支持阿里云 OSS 和腾讯云 COS,支持扩展到更多云服务。
The npm package cloud-upload-hub receives a total of 0 weekly downloads. As such, cloud-upload-hub popularity was classified as not popular.
We found that cloud-upload-hub demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
The Rust Security Response WG is warning of phishing emails from rustfoundation.dev targeting crates.io users.
Product
Socket now lets you customize pull request alert headers, helping security teams share clear guidance right in PRs to speed reviews and reduce back-and-forth.
Product
Socket's Rust support is moving to Beta: all users can scan Cargo projects and generate SBOMs, including Cargo.toml-only crates, with Rust-aware supply chain checks.