使用云开发,在自己的服务器管理微信云端的小程序数据,实现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。
遇到这个问题已经快一个月了,之前也有提过,很着急等着,麻烦官方反馈一下,不胜感激!
从结果上看推测是参数填错了,你贴出来的代码不全,能否贴一下uploadfile这个api最终发出去的http报文以及后面那个multipart格式的http报文?
楼主你的上传照片能用了吗?
如下是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控制台截图