react上传文件到uniCloud(云服务器)的实现

前言

uniCloudDCloud 联合阿里云、腾讯云,为开发者提供的基于 serverless 模式和 js 编程的云开发平台,在uniapp的环境下,使用其内置的uniCloud提供的方法/函数,能够直接或使用云函数/云对象间接的控制云服务器的数据库云存储空间等。同时,若使用react搭建项目的后台管理系统时,可使用云服务器的云函数提供的url地址,去请求该云函数的接口,通过传参实现一体化开发。

但是,uniCloud无法通过url调用接口传参的方式直接将文件通过参数传递给云函数/云对象。即,阿里云无法在直接将文件上传到uniCloud的云存储空间,而腾讯云有一个插件。若想要实现从react后台管理界面实现文件的上传与下载,则需要使用第三方插件,阿里云的 ali-oss 插件 配置uniCloud数据信息

原理

uniCloudhbuilder联合阿里云和腾讯云的serverless,推出的uniCloud平台,并不是一个serveless服务器 !!!!! (也就是uniCloud是对serveless操作的平台)

但是,其原理是使用uniCloud的方法,访问阿里云的serveless,也就是发送请求给serveless,存储、拿取数据或上传和下载文件;即:uniCloud的云存储空间是指的是阿里云/腾旭云的serveless服务器的云存储空间。

注:正常的操作uniCloud云存储空间的过程: 用户 --> uniCloud --> (serveless)云存储空间

若需要在uniapp之外使用uniCloud的云存储空间,可以使用uniCloud提供的参数数据配合插件直接对serveless服务器进行操作。即: 用户 --> (serveless)云存储空间

阿里云上传文件原理:使用阿里云的 ali-oss 插件 配置uniCloud数据信息,进行上传。但是,该插件并不能直接使用,因为其内部调用的方法,返回的参数不一定是uniCloud上传文件需要的参数数据信息。因此,需要对该插件的文件进行修改。

注:uniCloud的参数是在uniCloud服务器空间首页查看。

该插件上传总体上传文件分为三次请求:

markdown 复制代码
 (第一次请求和第二次请求的接口一样,第一次不带参数,第二次带参数,拿到不同的结果)
    1,发送请求,获取keyID  ;
    2,发送请求,获取token 和 签名;       
    3,发送上传文件的接口,需要第二次获取的token和签名,返回上传结果和文件的下载地址 

实现

通过对文件进行修改,达到需要的使用要求,即:在react上上传和下载uniCloud的云存储空间的文件。插件修改后存放在我的gitee上,需要的可以使用git下载;地址:https://gitee.com/longingfortheworld/theUniCloud/tree/master

typescript 复制代码
    // yyy是案例
    
    // 插件的使用
    // 使用配置好的文件 :     
    const fs = require("fs")

    // 导入包
    const SX = require('./unicloud2aliss');
    // 初始化(两个必传参数)
    const spaceId = "mp-a7023582-0024-4f1c-9666-2986b225541b"                   
    // uniCloud上的 spaceId
    const clientSecret = "H41MC7vgkJtHep9YRvHMRQ=="

    const unics = new SX(spaceId, clientSecret);

    const file = fs.readFileSync("./03.jpg")
    const file_name = "1234567.jpg"

    unics.upload(file, file_name).then(res=>{
        console.log("上传成功")
        console.log(res)
    }).catch(err=>{
        console.log("上传时报")
        console.log(err)
    })

总结

uniCloudDCloud 联合阿里云、腾讯云,为开发者提供的基于 serverless 模式和 js 编程的云开发平台。最终数据是存储到serveless云服务器的,也就是uniCloud调用的方法也都是调用的serveless的云服务器接口,同时,uniCloud的服务器空间提供的云函数url,不能直接传参文件,因此,无法在第三方直接上传和下载文件。但是可以使用第三方插件直接访问serveless,注:使用uniCloud云空间的参数,上传。

相关推荐
每一天,每一步3 小时前
react antd点击table单元格文字下载指定的excel路径
前端·react.js·excel
screct_demo13 小时前
詳細講一下在RN(ReactNative)中,6個比較常用的組件以及詳細的用法
javascript·react native·react.js
光头程序员1 天前
grid 布局react组件可以循数据自定义渲染某个数据 ,或插入某些数据在某个索引下
javascript·react.js·ecmascript
limit for me1 天前
react上增加错误边界 当存在错误时 不会显示白屏
前端·react.js·前端框架
浏览器爱好者1 天前
如何构建一个简单的React应用?
前端·react.js·前端框架
muchan921 天前
去TMD的逻辑过程,不写了
前端·后端·程序员
VillanelleS1 天前
React进阶之高阶组件HOC、react hooks、自定义hooks
前端·react.js·前端框架
腾讯云开发者1 天前
新质生产力时代,企业如何走向数字原生?
程序员
傻小胖1 天前
React 中hooks之useInsertionEffect用法总结
前端·javascript·react.js
flying robot1 天前
React的响应式
前端·javascript·react.js