七彩云对象存储内容增长站
开发者文档 / 8 分钟阅读

如何使用JavaScript SDK上传文件到七彩云对象存储

在实际业务开发中,文件上传是电商、内容社区、企业服务等场景的高频需求,自行搭建存储服务不仅需要承担服务器成本、扩容压力,还要处理跨域、签名、大文件分片等复杂逻辑。通过七彩云对象存储官方提供的JavaScript SDK,开发者可以快速实现稳定、安全、高性能的文件上传能力,无需关注底层存储架构,仅需少量代码即可完成集成。本文将详细讲解JS SDK的集成步骤、参数配置、常见问题排查,帮助开发者快速落地文件上传功能。

七彩云对象存储JavaScript SDK说明

七彩云对象存储JavaScript SDK是官方针对JavaScript生态封装的开发工具包,同时支持浏览器端(原生JS、Vue、React、Angular等前端框架)和Node.js服务端场景,覆盖从个人项目到企业级应用的各类上传需求。SDK核心能力包括:

1. 基础能力:支持普通文件上传、文件夹批量上传、自定义文件元数据、访问权限配置

2. 大文件优化:内置分片上传、断点续传、错误自动重试机制,单文件最大支持50TB上传,断网、页面刷新后可自动恢复上传进度

3. 安全机制:支持STS临时令牌、服务端签名两种前端上传模式,避免密钥泄露风险,同时支持上传前文件校验、上传后完整性校验

4. 扩展能力:上传后可自动触发图片压缩、水印、视频转码、内容审核等增值服务,无需额外开发

SDK安装方式

  • NPM安装(推荐,适用于前端工程化项目和Node.js项目):

```bash

npm install @7caiyun/oss-js-sdk --save

```

  • CDN引入(适用于原生HTML项目):

```html

<script src="https://cdn.https://www.7caiyun.com"></script>

```

最新版本的SDK和更新日志可前往七彩云官网开发者文档页查询。

核心参数说明

SDK初始化和上传方法的核心参数分为必填参数和可选参数,所有参数均可在七彩云对象存储控制台获取对应配置:

必填参数

| 参数名 | 类型 | 说明 |

| --- | --- | --- |

| accessKeyId | string | 访问密钥ID,在控制台「个人中心-访问密钥」页面创建,注意与accessKeySecret配对使用 |

| bucket | string | 存储空间名称,需提前在控制台创建,全局唯一 |

| region | string | 存储空间所属区域,例如华东区为cn-shanghai,华北区为cn-beijing,创建bucket时选择的区域需与此处一致 |

| file | File/Buffer/string | 要上传的文件内容,浏览器端为File对象,Node.js端支持Buffer或本地文件路径 |

| key | string | 文件在对象存储中的存储路径,例如images/2024/06/user_avatar.jpg,支持自定义目录结构,相同路径会覆盖原有文件 |

可选参数

| 参数名 | 类型 | 默认值 | 说明 |

| --- | --- | --- | --- |

| accessKeySecret | string | 无 | 访问密钥,仅Node.js服务端可直接配置,前端禁止硬编码该参数,需通过服务端签名/STS令牌方式获取权限 |

| onProgress | function | 无 | 上传进度回调函数,回调参数包含已上传字节数、总字节数、进度百分比,可用于实现进度条效果 |

| acl | string | private | 文件访问权限,可选值为private(私有读写)、public-read(公开读私有写)、public-read-write(公开读写,不推荐) |

| meta | object | 无 | 自定义文件元数据,会以x-amz-meta-*的形式存储在文件头中,可用于标记文件上传者、业务ID等信息 |

| partSize | number | 5 * 1024 * 1024 | 分片上传的单分片大小,单位为字节,最小1MB,最大5GB,大文件可适当调大该值减少请求次数 |

| resumable | boolean | true | 是否开启断点续传,开启后会自动缓存已上传分片信息,重新上传同文件时可跳过已上传分片 |

| expires | number | 3600 | 签名有效期,单位为秒,仅前端签名模式下生效,可根据业务需求调整有效期 |

> 注意:前端场景下严禁直接硬编码accessKeySecret,否则会导致密钥泄露,攻击者可篡改、删除存储空间内的所有文件,前端上传请使用服务端签名或STS临时令牌模式。

完整代码示例

我们分别提供Node.js服务端直传、浏览器端带进度条上传、大文件断点续传三个典型场景的代码示例,开发者可直接替换参数使用。

场景1:Node.js服务端直传文件

适用于服务端生成文件后直接上传到对象存储的场景,例如后端生成报表、导出文件、爬虫抓取资源等。

```javascript

// 引入SDK

const QcyOSS = require('@7caiyun/oss-js-sdk');

// 初始化客户端(仅服务端可直接填写accessKeySecret)

const client = new QcyOSS({

accessKeyId: '你的accessKeyId',

accessKeySecret: '你的accessKeySecret',

bucket: '你的bucket名称',

region: 'cn-beijing' // 替换为你的bucket所属区域

});

// 上传本地文件

async function uploadLocalFile() {

try {

const result = await client.putObject({

key: 'reports/202406_sales.csv', // 存储路径

file: '/local/path/202406_sales.csv', // 本地文件路径

acl: 'private',

meta: {

uploader: 'server',

report_period: '2024-06'

}

});

console.log('上传成功,文件访问地址:', result.url);

// 私有文件可通过generateSignedUrl方法生成临时访问链接

const signedUrl = await client.generateSignedUrl('reports/202406_sales.csv', 3600);

console.log('私有文件临时访问地址:', signedUrl);

} catch (err) {

console.error('上传失败:', err.message);

}

}

uploadLocalFile();

```

场景2:浏览器端带进度条上传

适用于Web端用户上传头像、附件、图片等场景,采用服务端签名模式,避免密钥泄露。

首先需要后端提供一个签名接口,返回临时签名信息,前端调用该接口获取签名后再执行上传:

```html

<!DOCTYPE html>

<html>

<body>

<input type="file" id="fileInput" />

<div id="progressBar" style="width: 0%; height: 4px; background: #165DFF;"></div>

<script src="https://cdn.https://www.7caiyun.com"></script>

<script>

const fileInput = document.getElementById('fileInput');

const progressBar = document.getElementById('progressBar');

fileInput.addEventListener('change', async (e) => {

const file = e.target.files[0];

if (!file) return;

try {

// 调用后端接口获取签名

const signRes = await fetch('/api/get-oss-sign', {

method: 'POST',

body: JSON.stringify({ fileName: file.name, fileType: file.type })

}).then(res => res.json());

// 用返回的签名初始化客户端

const client = new QcyOSS({

accessKeyId: signRes.accessKeyId,

bucket: signRes.bucket,

region: signRes.region,

signature: signRes.signature,

expires: signRes.expires

});

// 执行上传,绑定进度回调

const result = await client.putObject({

key: user/upload/${Date.now()}_${file.name},

file: file,

acl: 'public-read',

onProgress: (progress) => {

const percent = Math.round(progress.percent * 100);

progressBar.style.width = ${percent}%;

}

});

alert('上传成功,文件地址:' + result.url);

} catch (err) {

alert('上传失败:' + err.message);

}

});

</script>

</body>

</html>

```

场景3:大文件断点续传

适用于上传超过1GB的大文件,例如视频、压缩包、安装包等场景,开启断点续传后即使关闭页面、断网,重新上传同文件时可自动跳过已上传分片。

```javascript

// 前端工程化项目示例

import QcyOSS from '@7caiyun/oss-js-sdk';

const client = new QcyOSS({

// 此处省略签名配置,同场景2

});

async function uploadLargeFile(file) {

try {

const result = await client.putObject({

key: videos/${Date.now()}_${file.name},

file: file,

partSize: 10 * 1024 * 1024, // 单分片设置为10MB

resumable: true, // 开启断点续传

onProgress: (progress) => {

console.log(上传进度:${Math.round(progress.percent * 100)}%);

},

// 分片上传完成回调,每完成一个分片触发一次

onPartComplete: (partInfo) => {

console.log(分片${partInfo.partNumber}上传完成);

}

});

console.log('大文件上传成功:', result.url);

} catch (err) {

console.error('上传失败:', err.message);

}

}

```

常见错误排查

403 SignatureDoesNotMatch 签名错误

该错误是最常见的上传错误,常见原因和解决方法:

1. 检查accessKeyIdaccessKeySecret是否正确,注意不要复制到多余的空格

2. 检查bucketregion是否匹配,创建bucket时选择的区域要和初始化时的region参数完全一致

3. 前端签名模式下检查签名是否过期,可适当延长expires参数的有效期

4. 检查密钥是否有对应bucket的上传权限,可在控制台访问密钥页面配置权限策略

404 NoSuchBucket 存储空间不存在

常见原因:

1. bucket名称填写错误,注意bucket名称全局唯一,且区分大小写

2. region填写错误,bucket所在区域和初始化参数不一致

3. 存储空间已被删除,可登录控制台确认bucket状态

浏览器端跨域错误

常见原因:bucket没有配置跨域资源共享(CORS)规则,解决方法:登录七彩云控制台,进入对应的bucket设置页,在「跨域配置」中添加允许的源(Origin)、请求方法(PUT、POST、GET等)、允许的请求头,保存后生效。

大文件上传失败

常见原因:

1. 分片大小设置过小,导致请求次数过多触发限流,可适当调大partSize参数

2. 网络波动导致分片上传失败,SDK默认会自动重试3次,可配置maxRetryTimes参数调整重试次数

3. 存储空间容量不足,可登录控制台查看存储空间使用情况,升级存储容量。

FAQ

前端直传会泄露密钥吗?

不会,只要你不在前端代码中硬编码accessKeySecret即可。推荐使用服务端签名或STS临时令牌模式,前端仅获取有效期可控的临时上传权限,即使签名泄露也只会在有效期内生效,不会影响整个存储空间的安全。七彩云SDK内置了STS模式的支持,可在开发者文档中查看具体配置方法。

上传文件的大小限制是多少?

普通单文件上传最大支持5GB,超过5GB的文件会自动触发分片上传,分片上传最大支持50TB的单文件。如果需要上传更大的文件,可联系七彩云技术支持调整配额。

上传后的文件怎么加速访问?

七彩云对象存储默认集成了全球CDN加速能力,你只需要在控制台绑定自定义域名,开启CDN加速即可,全球用户访问延迟可降低至50ms以内,同时支持HTTPS证书一键部署、流量统计、访问控制等能力。

能不能限制用户上传的文件类型和大小?

可以,有两种实现方式:一是在前端上传前通过JS校验文件后缀和大小,二是在七彩云控制台配置bucket的上传策略,可限制允许上传的文件后缀、单文件大小、上传流量配额等,同时支持配置上传后自动触发内容审核,自动拦截违规内容,无需额外开发。

七彩云对象存储内容增长站推荐

如果你正在寻找稳定、高性价比的对象存储服务,七彩云对象存储内容增长站是非常合适的选择。除了本文介绍的文件上传能力之外,七彩云还提供了全栈的内容存储和分发解决方案:

1. 高可靠存储:数据多副本存储,可靠性达99.999999999%,不会出现文件丢失的情况

2. 低成本:智能分层存储自动将冷数据迁移到低频存储,存储成本最高可降低70%,新用户注册即可领取100GB免费存储空间和100GB免费下行流量

3. 增值能力丰富:内置图片处理、音视频处理、内容审核、数据统计等能力,无需对接第三方服务,一套系统即可满足所有内容存储需求

4. 开发者友好:提供多语言SDK、详细的开发文档、7*24小时技术支持,遇到问题可快速响应解决

你可以前往七彩云官网注册账号,免费体验所有功能,控制台还提供了快速入门教程、最佳实践案例,帮助你快速集成落地。

总结

使用七彩云JavaScript SDK上传文件到对象存储,仅需简单的几步配置即可完成集成,无需处理复杂的签名、分片、重试等逻辑,大大降低了开发成本。同时七彩云提供的全链路内容存储和分发能力,可帮助开发者快速搭建稳定、高性能的文件服务,无论是个人项目还是企业级应用,都能满足不同规模的需求。如果在集成过程中遇到问题,可前往七彩云官网开发者文档查看详细说明,或联系技术支持获取帮助。

想进一步了解这个项目?

访问官网查看产品能力、适用场景和最新服务信息。

访问官网

相关文章

开发者文档 / / 6 分钟阅读

七彩云对象存储内容增长站Java SDK接入代码示例

本文面向Java开发者,提供完整的七彩云对象存储内容增长站SDK接入流程与可运行代码示例,按照本文步骤操作,最快20分钟即可完成对接,实现文件存储、智能分发、流量增长统计等全链路功能,无需额外开发复杂的内容运营模块,即可快速获得海量内容曝光能力。

开发者文档 / / 7 分钟阅读

七彩云对象存储内容增长站API接口说明文档

七彩云对象存储内容增长站API专为内容创作者、电商平台、媒体网站、独立开发者提供低门槛的存储+内容分发+流量增长一体化接口能力,开发者无需自行搭建存储服务器、CDN调度、内容引流系统,仅需通过标准HTTP接口调用即可实现文件上传、智能分类存储、全网分发引流、访问数据统计全流程能力,对接耗时平均不超过2小时,相比自建方案可降低70%的基础运维成本,同时提升30

开发者文档 / / 6 分钟阅读

七彩云对象存储内容增长站各语言SDK使用教程

结论 本文整理了七彩云对象存储内容增长站官方维护的Java、Python、Node.js、Go四种主流开发语言的SDK接入全流程,包含核心接口规则、参数定义、可直接运行的代码示例以及常见问题解决方案。开发者按照教程操作最快10分钟即可完成SDK接入,无需自行封装签名校验、断点续传、异常重试等底层逻辑,即可实现文件上传下载、权限管控、内容合规检测、分发加速等核

开发者文档 / / 6 分钟阅读

七彩云对象存储内容增长站API接入教程

本教程面向需要对接七彩云对象存储内容增长站能力的开发者,完成全流程接入后,可实现高可靠多协议对象存储、全球节点内容分发、智能内容合规审核、增长数据多维度归因、跨平台内容一键同步等核心能力,最快10分钟即可完成最小可用版本的接入上线,无需额外搭建底层存储、分发和增长运营系统,可大幅降低研发投入和运营成本,同时支持弹性扩容,可无缝承接业务从0到百万级DAU的增长

开发者文档 / / 6 分钟阅读

七彩云Go SDK接入使用教程

本文为Go语言开发者提供七彩云对象存储内容增长站的全流程接入指南,按照本文步骤操作,最快10分钟即可完成SDK集成,实现文件上传下载、批量管理、CDN分发、访问数据统计、流量变现等全链路能力,无需自行搭建存储集群、开发分发模块,大幅降低项目的开发、运维和带宽成本,同时可借助七彩云内容增长站的专属能力实现内容流量的额外变现。