微信小程序直接上传文件到阿里云OSS(Object Storage Service)的过程涉及多个步骤,以下是一个清晰的步骤说明:
1. 配置Bucket跨域规则
- OSS对带有Origin头的请求消息会进行跨域规则(CORS)的验证。
- 登录OSS管理控制台,选择Bucket列表,然后单击目标Bucket名称。
- 在Bucket详情页中,选择“权限管理” > “跨域设置”,点击“设置”进入跨域规则配置页面。
- 单击“创建规则”,根据提示配置跨域规则,确保支持Post方法。
2. 配置外网域名到小程序的上传域名白名单
- 通过OSS控制台查看Bucket的外网域名。
- 登录微信小程序平台,在“开发” > “开发设置” > “服务器域名”中,配置小程序的上传文件(uploadFile)的合法域名,将OSS的外网域名添加到白名单中。
3. 获取AccessKey和配置小程序端
- 在阿里云RAM(Resource Access Management)中创建一个RAM用户,并为该用户分配OSS的访问权限。
- 获取RAM用户的AccessKey ID和AccessKey Secret。
- 在小程序端,创建一个配置文件(如
config.js
),在其中配置OSS的访问信息,包括Bucket域名、AccessKey ID和AccessKey Secret等。
4. 使用uploadFile接口上传文件
-
在小程序端,使用
wx.uploadFile
接口上传文件。 -
设置请求的URL为OSS的外网域名。
-
设置
filePath
为待上传文件的本地路径。 -
在
formData
中,设置必要的OSS参数,如key
(对象键,即文件在OSS中的路径和文件名)、policy
(策略Base64编码后的字符串)、OSSAccessKeyId
(AccessKey ID)、signature
(签名)等。 -
示例代码(参考文章3):
javascript复制代码
const host = '<OSS外网域名>'; | |
const signature = '<签名>'; | |
const ossAccessKeyId = '<AccessKey ID>'; | |
const policy = '<策略Base64编码后的字符串>'; | |
const key = '<对象键>'; | |
const filePath = '<待上传文件的本地路径>'; | |
wx.uploadFile({ | |
url: host, | |
filePath: filePath, | |
name: 'file', // 必须填file | |
formData: { | |
key, | |
policy, | |
OSSAccessKeyId: ossAccessKeyId, | |
signature, | |
// 'x-oss-security-token': securityToken // 使用STS签名时必传 | |
}, | |
success: (res) => { | |
if (res.statusCode === 204) { | |
console.log('上传成功'); | |
} | |
}, | |
fail: (err) => { | |
console.log(err); | |
} | |
}); |
注意事项
- 为了安全起见,建议使用STS(Security Token Service)进行临时授权,避免在客户端直接暴露AccessKey ID和AccessKey Secret。
- 确保小程序端配置的OSS访问信息(如Bucket域名、AccessKey ID等)与OSS的实际设置保持一致。
- 在测试上传功能时,注意检查控制台输出和OSS控制台中的文件列表,确保文件已成功上传。