npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

cloud-upload-hub

v1.0.2

Published

支持将文件同时上传至单个或者多个云存储服务,当前支持阿里云 OSS 和腾讯云 COS,支持扩展到更多云服务。

Readme

cloud-upload-hub

npm version

一个轻量级的前端多云存储上传工具,支持阿里云 OSS、腾讯云 COS 等云存储服务,提供统一的接口和灵活的配置选项。

这个库的目的是通过简洁的 API,开发者可以轻松集成多个云平台的文件上传功能,无需重复实现不同平台的逻辑。

特性

  • 🚀 多云支持:支持阿里云 OSS、腾讯云 COS 等云存储服务
  • 🔄 灵活配置:支持命令行参数和配置文件两种方式
  • 🛠 易于扩展:支持自定义上传器,轻松扩展其他云存储服务
  • 📊 进度监控:实时显示上传进度和状态
  • 🔄 自动重试:内置重试机制,提高上传可靠性
  • 📦 轻量级:零依赖,体积小巧
  • 🚀 简化集成:统一接口,简化文件上传流程。
  • 🛠 请求头配置:支持 OSS 和 COS 的独立请求头配置。
  • 🛠 指定最后上传的文件:默认 index.html,通过最后一个生效文件,解决资源无序上传带来的页面资源加载失败。

📦 安装

npm install cloud-upload-hub --save-dev 

🚀 快速开始

1. 命令行方式

# 基础用法
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

2. 配置文件方式

创建 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 格式),需包含 bucketaccessKeyIdaccessKeySecretregion。 | 在没有配置uploaderModules时,ossCredentialscosCredentials二选一必传 | 是 | 是 | | cosCredentials | 腾讯云 COS 配置,支持异步获取,需返回 SecretIdSecretKey。 | 在没有配置uploaderModules时,ossCredentialscosCredentials二选一必传 | 是 | 是 | | retryLimit | 最大重试次数(默认为5),在上传失败时进行重试。 | 否 | 是 | 是 | | maxConcurrent | 并发上传数量限制(默认为10),控制同时上传的文件数量。 | 否 | 是 | 是 | | lastFile | 最后上传的文件(默认 index.html),指定上传顺序中的最后文件。 | 否 | 是 | 是 | | uploaderModules | 自定义上传模块配置,可以加载其他上传逻辑。 | 否 | 是 | 是 | | onUploadSuccess | 上传成功的回调函数,接收上传状态。 | 否 | 否 | 是 | | onUploadFail | 上传失败的回调函数,接收失败状态。 onUploadFail(status<1:资源上传前;2:资源文件上传过程中;3:生效文件上传过程中;4:加载配置文件; 0: 未知错误>, message) | 否 | 否 | 是 |

云存储配置

uploader.config.js 支持三种模式:

  1. 配置文件路径:指定 OSS 或 COS 的配置文件路径。
    ossCredentials: './config/oss.tice.conf.json', 
  2. 配置对象:直接在配置中以对象形式提供相关凭据。
    ossCredentials: {
        SecretId: 'xxx',  // COS的秘密ID
        SecretKey: 'xxx',  // COS的秘密密钥
        ...
    }, 
  3. 异步函数:Promise 下的接口请求返回数据对象:通过异步接口请求返回的对象来提供凭据。
    ossCredentials: async () => {
      const response = await fetch('your-api');
      return response.json();
    }

自定义上传器

  1. 函数配置

可以通过 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', // 上传器类型, 必填
})

常见问题

1. 如何更改上传目标?

在配置文件中,可以通过 mode 参数来指定不同的上传目标:

"scripts": {
    "uploader:tice": "cloud-upload-hub --mode=tice"
}

2. 如何处理上传成功和失败的事件?

在配置中定义 onUploadSuccessonUploadFail 回调函数,处理相应的事件:

onUploadSuccess(status) {
  console.log('构建成功', status);
},
onUploadFail(status) {
  console.log('构建失败', status);
},

3. 上传日志什么样子?

====== 共扫描了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个) ======