基于表单上传(Node.js SDK)
开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。
功能说明
基于表单上传是使用HTML表单形式上传对象到指定桶中,对象最大不能超过5GB。
您可以通过ObsClient.createPostSignatureSync生成基于表单上传的请求参数。使用Node.js代码模拟表单上传的完整代码示例,参见post-object-sample。您也可以通过如下步骤进行表单上传:
- 使用ObsClient.createPostSignatureSync生成用于鉴权的请求参数。
- 准备表单HTML页面。
- 将生成的请求参数填入HTML页面。
- 选择本地文件,进行表单上传。
方法定义
ObsClient.createPostSignatureSync(params)
请求参数
参数名称 |
类型 |
是否必选 |
说明 |
---|---|---|---|
Bucket |
string |
必选 |
参数解释: 桶名。 约束限制:
取值范围: 长度为3~63个字符。 默认取值: 无 |
Key |
string |
必选 |
参数解释: 对象名。对象名是对象在存储桶中的唯一标识。对象名是对象在桶中的完整路径,路径中不包含桶名。 例如,您对象的访问地址为examplebucket.obs.cn-north-4.myhuaweicloud.com/folder/test.txt 中,对象名为folder/test.txt。 约束限制: 无 取值范围: 长度大于0且不超过1024的字符串。 默认取值: 无 |
Expires |
Number |
可选 |
参数解释: 表单上传鉴权的过期时间。 约束限制: 无 取值范围: 正整数。单位:秒。 默认取值: 300 |
FormParams |
Object |
可选 |
参数解释: 除key、policy、signature外,表单上传时的其他参数。 约束限制: 无 取值范围:
默认取值: 无 |
返回结果
参数名称 |
参数类型 |
描述 |
---|---|---|
OriginPolicy |
String |
参数解释: Policy未经过base64之前的值,仅用于校验。 |
Policy |
String |
参数解释: 表单中的policy。 |
Signature |
String |
参数解释: 表单中的signature。 |
代码示例
以下代码展示了如何生成基于表单上传的请求参数:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
// 引入obs库 // 使用npm安装 const ObsClient = require("esdk-obs-nodejs"); // 使用源码安装 // var ObsClient = require('./lib/obs'); // 创建ObsClient实例 const obsClient = new ObsClient({ // 推荐通过环境变量获取AKSK,这里也可以使用其他外部引入方式传入,如果使用硬编码可能会存在泄露风险 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html access_key_id: process.env.ACCESS_KEY_ID, secret_access_key: process.env.SECRET_ACCESS_KEY, // 【可选】如果使用临时AK/SK和SecurityToken访问OBS,同样建议您尽量避免使用硬编码,以降低信息泄露风险。您可以通过环境变量获取访问密钥AK/SK,也可以使用其他外部引入方式传入 // security_token: process.env.SECURITY_TOKEN, // endpoint填写Bucket对应的Endpoint, 这里以华北-北京四为例,其他地区请按实际情况填写 server: "https://obs.cn-north-4.myhuaweicloud.com", }); function createSignedUrlSync() { const params = { // 指定存储桶名称 Bucket: "examplebucket", // 指定对象,此处以 example/objectname 为例 Key: "example/objectname", // 指定签名URL的过期时间,这里以3600为例,单位为秒 Expires: 3600, // 指定请求中携带的头域 FormParams: { 'x-obs-acl': 'public-read', 'content-type': 'text/plain' } }; // 生成上传对象的带授权信息的URL const res = obsClient.createPostSignatureSync(params); console.log("OriginPolicy : %s", res.OriginPolicy); console.log("Policy: %s", res.Policy); console.log("Signature: %v", res.Signature); }; createSignedUrlSync() |
示例表单HTML代码如下:
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> </head> <body> <form action="http://bucketname.your-endpoint/" method="post" enctype="multipart/form-data"> Object key <!-- 对象名 --> <input type="text" name="key" value="objectname" /> <p> ACL <!-- 对象ACL权限 --> <input type="text" name="x-obs-acl" value="public-read" /> <p> Content-Type <!-- 对象MIME类型 --> <input type="text" name="content-type" value="text/plain" /> <p> <!-- policy的base64编码值 --> <input type="hidden" name="policy" value="*** Provide your policy ***" /> <!-- AK --> <input type="hidden" name="AccessKeyId" value="*** Provide your access key ***"/> <!-- 签名串信息 --> <input type="hidden" name="signature" value="*** Provide your signature ***"/> <input name="file" type="file" /> <input name="submit" value="Upload" type="submit" /> </form> </body> </html>
您可以直接下载表单HTML示例PostDemo。