更新记录

0.1.1(2025-05-12)

更新插件依赖库

0.1.0(2025-05-12)

小程序上传文件到阿里云OSS


平台兼容性

阿里云 腾讯云 支付宝云

云函数类插件通用教程

使用云函数类插件的前提是:使用HBuilderX 2.9+


调用该云函数返回上传所需参数,由前端直接上传文件至阿里云oss;脱离了后端进行上传,极大的提升了上传文件速度。

本示例已提供完整可运行的代码,本文简要说明代码过程

1. 获取OSS秘钥

登录阿里云个人中心,获取账户的AccessKey ID和AccessKey Secret,推荐使用子用户的AccessKey

2. 设置CORS支持跨域

在bucket里面:数据安全 -> 跨域设置,按下图创建一条规则,勾选:GET、POST、PUT、DELETE、HEAD

3. 设置小程序request合法域名、uploadFile合法域名

登录小程序后台管理找到,开发管理->开发设置->服务器域名->点击右边【修改】按钮,依次在request合法域名、uploadFile合法域名处 添加 域名可参考:https://doc.dcloud.net.cn/uniCloud/publish.html#useinmp

4. 页面调用

<template>
    <view class="content">
        <image class="logo" src="/static/logo.png"></image>
        <view class="text-area">
            <button @click="uploadFile">上传</button>
        </view>
    </view>
</template>

<script>
    export default {
        data() {
            return {
                title: 'Hello'
            }
        },
        onLoad() {

        },
        methods: {
            uploadFile() {
                uni.chooseVideo({
                    success: async (res) => {
                        console.log("res====>", res)
                        let filePath = res.tempFilePath;
                        // #ifdef MP-ALIPAY
                        filePath = res.tempFile;
                        // #endif

                        const BaseUrl = "xxxxxxxxx";  // 外网访问 Bucket 域名 去你的 Bucket域名 概览中找, 示例: abc.oss-cn-beijing.aliyuncs.com
                        const accessKeyId = "xxxxxxxxx"; //AccessKeyId 去你的阿里云上控制台上找
                        const accessKeySecret = "xxxxxxxxx"; //AccessKeySecret 去你的阿里云上控制台上找
                        const ali = uniCloud.importObject('ossFile') //调用云对象 勿修改
                        //调用云对象的方法,勿修改  code:200 表示成功, 其他都是失败,错误信息:resData.err
                        let resData = await ali.getUploadFileParam({
                            count: 1,         //上传文件数量,默认上传1个 示例 coun:9 表示上传9个文件,
                            accessKeyId,     //必传,固定参数勿修改
                            accessKeySecret  //必传,固定参数勿修改 
                        });
                        if (resData.code != 200) {
                            console.log("上传失败..", resData.err);
                            return;
                        }
                        //返回生成文件名, 数组 [] 形式
                        let aliyunFileKeys = resData.data.aliyunFileKeys; 
                        let policy = resData.data.policy;
                        let OSSAccessKeyId = resData.data.OSSAccessKeyId;
                        let signature = resData.data.signature;
                        console.log("resData====>", resData)
                        // key: 表示上传的路径 + 文件名 + 文件名后缀 
                        let key = "123/" + aliyunFileKeys[0] + ".mp4"; 
                        uni.uploadFile({
                            url: BaseUrl,
                            filePath: filePath,
                            name: 'file',
                            formData: {
                                key,   //固定参数勿修改
                                policy, //固定参数勿修改
                                OSSAccessKeyId, //固定参数勿修改
                                signature, //固定参数勿修改
                                success_action_status: '200', //固定参数勿修改
                            },
                            success: (uploadFileRes) => {
                                //上传成功后文件的Url = BaseUrl + '/' + key    
                                console.log("上传成功", BaseUrl + '/' + key)
                            },
                            fail: (error) => {
                                console.log("上传失败..", error);
                            }
                        });
                    },
                    fail: (err) => {
                        console.log("err====>", err)
                    }
                })
            }
        }
    }
</script>

5. 技术交流群,有问题可在群内反馈

QQ群:705623891 软件交流群

6. 提醒

前端签名有密钥泄露风险,注意妥善保管accessKeyId和accessKeySecret 有问题请联系我微信

隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

暂无用户评论。

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问