1***@qq.com
1***@qq.com
  • 发布:2025-07-23 16:41
  • 更新:2025-07-24 11:44
  • 阅读:147

uniCloud允许在云对象或者云函数上传文件,但是前端要怎么把文件上传到云对象或者云函数呢?

分类:uniCloud

“云函数API
在云函数中操作云存储文件(不是在前端),包括在云函数里上传、删除云存储文件。

uniCloud.uploadFile(Object uploadFileOptions)”

uniCloud 提供了在云函数(云对象)上传文件的 api,但是问题是在前端我发送 formData 到云对象,云对象解析不了 formData:

// 前端  
const demo = () => {  
  uni.chooseImage({  
    success: (chooseImageRes) => {  
      const tempFilePaths = chooseImageRes.tempFilePaths  
      uni.uploadFile({  
        url: '.../demoObj/getData', // 这里没有把云对象地址显示完全  
        filePath: tempFilePaths[0],  
        name: 'file',  
        formData: {  
          user: 'test'  
        },  
        success: (uploadFileRes) => {  
          console.log(uploadFileRes.data)  
        }  
      })  
    }  
  })  
}  
<button @click="demo">选择图片</button>

我前端先使用 uni.uploadFile 上传 formData 到云对象,

// const dbJql = uniCloud.databaseForJQL()  
module.exports = {  
  _before() {},  
  getData(params) {  
    return this.getHttpInfo()  
  }  
}

这是云对象的代码,我去看过云对象的日志了,前端上传的 formData 没有在云对象日志里看到,

请求入参: {  
  "args": {  
    "path": "/getData",  
    "httpMethod": "POST",  
    "headers": {  
      "content-length": "27523",  
      "referer": "http://localhost:5173/",  
      "sec-fetch-site": "cross-site",  
      "x5-uuid": "be92c625275d956b89a0da729d3391f8",  
      "origin": "http://localhost:5173",  
      "x-client-ip": "61.141.0.123",  
      "sec-ch-ua-mobile": "?1",  
      "host": "fc-mp-cdbfa693-27a2-4406-ac75-bbc62899abe1.next.bspapp.com",  
      "content-type": "multipart/form-data; boundary=----WebKitFormBoundaryfKoV6B1ywvs18sB9",  
      "sec-fetch-mode": "cors",  
      "accept-language": "zh-CN,zh;q=0.9",  
      "x-forwarded-for": "61.141.0.123, 118.178.15.152, 123.57.117.186",  
      "accept": "*/*",  
      "x-real-ip": "61.141.0.123",  
      "sec-ch-ua": "\"Not)A;Brand\";v=\"8\", \"Chromium\";v=\"138\", \"Google Chrome\";v=\"138\"",  
      "sec-ch-ua-platform": "\"Android\"",  
      "x-sinfo": "on",  
      "x-forwarded-by": "172.28.195.28:80",  
      "accept-encoding": "gzip, deflate, br, zstd",  
      "user-agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Mobile Safari/537.36",  
      "sec-fetch-dest": "empty"  
    },  
    "queryStringParameters": {  
      "user": "test"  
    },  
    "isBase64Encoded": false,  
    "body": ""  
  },  
  "requestId": "ac1cc31c1753254684600148774"  
}  
请求响应状态: success

这是云对象的日志,可以看到 content-type 的值是 formData,但是 formData 的数据不知道跑哪里去了,
所以我现在就觉得很奇怪,提供了云函数(云对象)上传文件的 api,但是我前端却没办法把文件上传到云函数(云对象)。

2025-07-23 16:41 负责人:无 分享
已邀请:
1***@qq.com

1***@qq.com (作者)

为什么会有这个想法呢?就使用 uniCloud 作为后端,我写接口给前端使用,然后如果需要前端上传文件,我总不能说大哥,你前端先去关联一下 uniCloud,通过 uniCloud 就直接可以把数据放到云存储,不需要经过我后端,我感觉这样子不太对劲啊

  • DCloud_云服务_Mal

    前端不是使用uni-app开发的吗?

    2025-07-23 16:54

  • 1***@qq.com (作者)

    回复 DCloud_云服务_Mal: 是使用uniapp开发的,云函数和云对象不是有url化吗?那云函数和云对象不就和普通java后端写的接口一样了吗?给一个接口地址,然后前端去调用,这样子是不是就是前后端分离的更开一点,这样子更合适一点,而不是说前端去写后端代码,那也就会出现一个要求嘛,前端要能往云函数和云对象写的接口传递数据,肯定包括文件的二进制数据,那这样子的话,刚刚我上面演示完之后,你会发现好像是做不到的

    2025-07-24 00:52

DCloud_uniCloud_CRL

DCloud_uniCloud_CRL

阿里云云函数不支持接收formData。一般上传图片都是从前端上传,从前端上传不会占用后端服务器带宽,减少后端中转,上传更快,用户体验更好。

  • 追梦随想

    好是挺好,就是会出现一堆垃圾文件,后端也无法记录前端上传的文件,建议在上传接口增加一个回调给后端云函数,由开发者去记录每次上传的文件,后期还可以根据需要进行删除文件操作,目前只能前端上传完成后把地址传给后端,如果前端上传后没有提交,就没办法记录,长期下来会出现很多垃圾文件占用了存储空间

    2025-07-24 12:30

  • 用户2860235

    回复 追梦随想: 你这个我倒感觉不是问题,就前端上传云存储后直接拿到文件的fileId记录在数据库就行

    2025-07-24 13:08

  • 用户2860235

    但这样子其实我会担忧一个事情。前端上传我感觉不安全,我只能在前端进行限制上传的文件大小,没办法做任何的后端校验,这有点可怕,如果他跳过我前端的校验直接上传超大文件咋办

    2025-07-24 13:09

  • 追梦随想

    回复 用户2860235: 那好像没有好办法,但是如果上传接口有回调,那么可以在后台直接预警超大文件或者文件类型,不服务要求的立即就删除了,同时还可以定期清理无效的文件,这样多好

    2025-07-24 13:36

要回复问题请先登录注册