收藏
回答

小程序云开发中带图片的表单的正确提交方式?

本人新手,求各位大神给点建议!

如题,背景是云开发,比如当前有一个需要提交的表单,其中包括title,description等字段,以及图片,如何才能安全、完整、高效的将信息存入云数据库和存储呢?

我的思考:

1.将图片转为base64,与其他字段一起放入云函数的data中,然后在云端中转成图片保存如存储,然后得到fileID,随字段一起存入数据库。

优势:只进行一次提交。

问题:云函数的data中有大小限制,转成base64后图片不能过大,我尝试过400kb左右的图片就会出现data过大的错误导致无法成功上传,微信的图片压缩我也试过了,还是会存在部分过大,而且这样就无法保存一些需要高清的图片了。

2.先小程序端调用wx.cloud.uploadFile将图片上传到存储,返回得到fileID,然后将fileID随其他字段放入云函数的data中,云端存入数据库。

优势:可上传较大图片。

问题:虽然可以使用随机数,或者使用时间戳,但如何确保用户手机上传时的cloudPath路径唯一?(小程序的存储如果遇到路径重名会覆盖,如何避免)

而且如果在一定特殊场景下,比如信号不稳定,出现图片已经上传成功但得到fileID后在调用云函数时因网络出现无响应导致保存失败,那么云端数据完整性就会出现问题。


所以,我想问问大家有没有比较正确的上传方式,谢谢大家!!

回答关注问题邀请回答
收藏

2 个回答

  • admin
    admin
    发表于小程序端
    2020-07-07
    图片当然是云储存啊,文件名插入时间精确到秒➕ 随机字符串,基本上不会重名
    2020-07-07
    有用
    回复 5
    • Jeffrey
      Jeffrey
      2020-07-07
      那大哥你如何处理小程序端先 云储存 再 调用云函数 这样分步骤执行时可能会因为网络导致的脏数据问题呢?(就是上面我回复tony的问题)
      2020-07-07
      回复
    • admin
      admin
      2020-07-07回复Jeffrey
      楼上技术员已经回答你了
      2020-07-07
      回复
    • Jeffrey
      Jeffrey
      2020-07-07回复admin
      嗯嗯我之前已经回复了,只是想问问还有没有别的思路,非常感谢!
      2020-07-07
      回复
    • admin
      admin
      2020-07-07回复Jeffrey
      没有,我是先处理图片上传到云存储,再写入数据库,数据写入失败也懒得管图片了,哈哈,反正文件也不多,技术员回答很有用,将图片fileid记录下,数据写失败了就执行删除
      2020-07-07
      回复
    • Jeffrey
      Jeffrey
      2020-07-07回复admin
      好的好的 非常感谢解答!
      2020-07-07
      回复
  • 白宦成 #Linux中国
    白宦成 #Linux中国
    2020-07-07

    可以在小程序端写一个 UUID 的生成算法

    2020-07-07
    有用
    回复 5
    • Jeffrey
      Jeffrey
      2020-07-07
      这个我有想过,因为是在各自小程序端中执行,在数据量很大的时候,uuid也有极小可能重复,是不是需要生成完路径后先去调用其他cloud的接口查询数据库该路径是否有文件,若为空然后再上传呢?这样我感觉会执行效率没有直接随云函数提交来的高。我的开发经验不是很丰富,纠结了很久
      2020-07-07
      回复
    • 白宦成 #Linux中国
      白宦成 #Linux中国
      2020-07-07回复Jeffrey
      UUID 理论上是不会重复的,如果你担心重复,可以多加几个随机变量,将你的重复的可能尽可能降低。
      2020-07-07
      回复
    • Jeffrey
      Jeffrey
      2020-07-07回复白宦成 #Linux中国
      好的非常感谢回复,还有一个小问题想请教一下,如果图片上传成功后了得到fileID,在执行第二步(就是调用云函数将fileID与其他字段一起存入数据库)时候遇到调用失败(网络等原因),这样图片已经保存成功但是数据却没有成功存入数据库,导致这个图片就变成了脏数据,这样的情况如何去做异常处理呢?
      2020-07-07
      回复
    • 白宦成 #Linux中国
      白宦成 #Linux中国
      2020-07-07回复Jeffrey
      可以本地记录,网络恢复后交给函数段进行删除
      2020-07-07
      回复
    • Jeffrey
      Jeffrey
      2020-07-07回复白宦成 #Linux中国
      好的好的,非常感谢解答!
      2020-07-07
      回复
登录 后发表内容
问题标签