收藏
回答

什么时候能解决云开发使用uploadFile HTTPAPI上传文件后不可用

框架类型 问题类型 终端类型 AppID 基础库版本
小程序 Bug 客户端 wx2daca2e09c843f11 2.7.7

使用云开发,在自己的服务器管理微信云端的小程序数据,实现ServerLess的小程序服务。

在这个项目进行到测试阶段,发现了API的BUG问题,使用云开发HTTP API上传文件到微信小程序云存储,在小程序中使用 image src=cloud://xxxxfileID,控制台显示报错,不知道是什么原因。


按文档说明,使用的API是:

POST /tcb/uploadfile?access_token={token}

该调用成功后会返回一些重要参数,在之后还需要使用这些参数再次调用接口,完成将文件上传到腾讯云。

下面是一段Java代码,实现按参数返回的接口地址和其他参数,调用上传文件。

String fileName2 = Optional.of(fileName).orElse(file.getName());
MultipartBody requestBody = new MultipartBody.Builder()
        .addFormDataPart("key", path)
        .addFormDataPart("Signature", authorization)
        .addFormDataPart("x-cos-security-token", token)
        .addFormDataPart("x-cos-meta-fileid", cosFileId)
        .addFormDataPart("file", fileName2, RequestBody.create(MultipartBody.FORM, file))
        .build();
Request request = new Request.Builder()
        .url(url)
        .post(requestBody)
        .build();
try (Response response = okHttpClient.newCall(request).execute()) {
    return response.body().string();
} catch (IOException e) {
    Integer code = 1;
    String codeString = "Call failure:" + e.getClass().getSimpleName();
    String errorMessage = e.getMessage();
    throw new WeChatCloudAPICallFailException(code, codeString, errorMessage);
}

在这一步,调用也成功,然后在微信开发者工具也能看到已上传的文件和文件夹。

但是,这个文件夹显示有点奇怪,还带了冒号,请看图:



上面显示的FileID也是比较奇怪,与调用 HTTP API 上传文件得到的FileID不一样,

HTTP API给我返回的值是cloud://test-p73gd.7465-test-p73gd-1259274660/upload_201907/MPCCb0a66c6ee1d7420f94aabb6d5bdcc925.png



如果是直接用小程序 wx.cloud.uploadFile 上传文件,那上传的文件夹不会出现这种奇怪的情况,而且文件fileID是正常可用的。

所以这个应该是云HTTP API的BUG。

遇到这个问题已经快一个月了,之前也有提过,很着急等着,麻烦官方反馈一下,不胜感激!

最后一次编辑于  2019-07-26
回答关注问题邀请回答
收藏

3 个回答

  • Alonzo Church
    Alonzo Church
    2019-07-26

    从结果上看推测是参数填错了,你贴出来的代码不全,能否贴一下uploadfile这个api最终发出去的http报文以及后面那个multipart格式的http报文?

    2019-07-26
    有用 1
    回复 8
    • Robin
      Robin
      2019-07-26
      感谢围观。我今天下午又使用PostMan来做了一边请求,应该不是我的请求的问题!
      2019-07-26
      回复
    • Alonzo Church
      Alonzo Church
      2019-07-26回复Robin
      贴一下报文。打开postman console再触发请求,这样每个请求都能看到完整的http 报文内容,截图发一下。这个api参数比较多,很多开发者都会填错。
      2019-07-26
      回复
    • Robin
      Robin
      2019-07-26回复Alonzo Church
      不知道你有木有用过这个API,并且没有问题?
      2019-07-26
      回复
    • Robin
      Robin
      2019-07-26回复Alonzo Church
      你好,这个API我截图了。
      2019-07-26
      回复
    • Alonzo Church
      Alonzo Church
      2019-07-26回复Robin
      我是这个api的开发者
      2019-07-26
      回复
    查看更多(3)
  • Aか潘   💯
    Aか潘 💯
    2019-11-08

    楼主你的上传照片能用了吗?

    2019-11-08
    有用
    回复
  • Robin
    Robin
    2019-07-26

    如下是PostMan测试用的模板,可以用 Import - Past Raw Text 完成导入,然后就可以按顺序测试:

    模板内容太长,请下载文件:

    https://7465-test-p73gd-1259274660.tcb.qcloud.la/WeChat%20%E4%BA%91%E5%BC%80%E5%8F%91API%E6%B5%8B%E8%AF%95POSTMAN.postman_collection.json?sign=d118e6c6413e45871456061b1e959fea&t=1564135628

    1、首先填写你的APPID、APPSecret,调用GetAccessToken 获取TOKEN

    2、然后,填TOKEN和其他几个参数,调用UploadFile

    3、之后,根据UploadFile返回的结果,将得到的参数对号入座,调用PostFileToQCloud!


    附上图片,一个请求将文件上传到腾讯云COS的PostMan控制台截图


    2019-07-26
    有用
    回复 5
    • Alonzo Church
      Alonzo Church
      2019-07-26
      PostFileToQCloud这个请求的key字段应该填你在uploadfile api中填的path参数,而不是file_id
      2019-07-26
      回复
    • Robin
      Robin
      2019-07-27回复Alonzo Church
      如雷贯耳!问题确实如此!
      2019-07-27
      回复
    • Aか潘   💯
      Aか潘 💯
      2019-11-19回复Robin
      楼主上传照片能用了吗,帮忙看看我的这个问题
      2019-11-19
      回复
    • Aか潘   💯
      Aか潘 💯
      2019-11-23回复Robin
      大神求救啊
      2019-11-23
      回复
    • 宇众不同
      宇众不同
      2020-02-14
      你好,问题解决了嘛?我也遇到一样的问题,谢谢
      2020-02-14
      回复
登录 后发表内容