- 云开发什么时候支持python
- 希望提供的能力: 什么时候提供python开发云函数?据说阿里云已经支持了。我一大堆代码都是python,python的库比较多,一起来强大。
2019-04-01 - 小程序如何下载线上pdf到手机相册或者指定文件路径
使用download和savefile后保存的路径是微信本地储存。这个本地储存可以像相册那样打开访问么?现在的需求是有个线上pdf链接,需要下载到用户手机,以便随时打开浏览,请问这个功能可以实现么?
2018-03-02 - 小程序里的文件何去何从?
downloadFile;getFileSystemManager;openDocument 这三个是比较常用的文件相关api,不管是下载到临时路径、小程序隔离存储、直接打开,我们需要的不仅仅是只在自己的微信上通过小程序查看。 我们期望的是交互,是用户和我们的小程序形成一个生态圈,而不是让用户只在一个小小的小程序里边。 但是我们开发者是真的搞不懂微信相关到底是有什么顾虑,只是在自己一个小小的圈子里。再者说,我通过文件接口把文件下载然后打开之后,顺理成章的,肯定是转发给我的好友,但是这么自然的一种操作趋势还能被微信相关产品经理给生生的打断。 没有分享,没有转发,没有交互,我要downloadFile;getFileSystemManager;openDocument这三个接口有什么用,自己做着玩儿? 麻烦微信相关产品不要再孤芳自赏,怡然自得的把自己关在小程序这个小闭环里了。 最后贴上自己的代码,烦请微信官方考虑一下我们开发者的需求,不要只顾自己开心,好吧? [代码]const file_manager = wx.getFileSystemManager();[代码][代码]const file_dir = wx.env.USER_DATA_PATH + [代码][代码]"/a"[代码][代码];[代码] [代码]file_manager.access({[代码][代码] [代码][代码]path: file_dir,[代码][代码] [代码][代码]complete:[代码][代码]function[代码][代码]( result ) {[代码][代码] [代码][代码]let code_msg = result.errMsg;[代码][代码] [代码][代码]if[代码] [代码](code_msg.indexOf( [代码][代码]'ok'[代码] [代码]) == -1 ) {[代码][代码] [代码][代码]file_manager.mkdir({[代码][代码] [代码][代码]dirPath: file_dir,[代码][代码] [代码][代码]recursive: [代码][代码]true[代码][代码],[代码][代码] [代码][代码]complete: [代码][代码]function[代码] [代码](result) {[代码][代码] [代码][代码]console.log( result );[代码][代码] [代码][代码]}[代码][代码] [代码][代码]});[代码][代码] [代码][代码]}[代码][代码] [代码][代码]}[代码][代码]});[代码] [代码]wx.downloadFile({[代码][代码] [代码][代码]url:[代码][代码]'https://ncstatic.clewm.net/rsrc/2019/0410/15/1cad975df1a49179a2a4a46d7e7cbec0.pdf'[代码][代码],[代码][代码] [代码][代码]complete: [代码][代码]function[代码][代码](result) {[代码][代码] [代码][代码]if[代码] [代码]( result.statusCode != 200 ) {[代码][代码] [代码][代码]return[代码][代码];[代码][代码] [代码][代码]}[代码] [代码] [代码][代码]file_manager.saveFile({[代码][代码] [代码][代码]tempFilePath: result.tempFilePath,[代码][代码] [代码][代码]filePath:file_dir+[代码][代码]'/a.pdf'[代码][代码],[代码][代码] [代码][代码]complete:[代码][代码]function[代码][代码]( result ) {[代码][代码] [代码][代码]// 下载失败[代码][代码] [代码][代码]let code_msg = result.errMsg;[代码][代码] [代码][代码]if[代码] [代码](code_msg.indexOf([代码][代码]'ok'[代码][代码]) == -1) {[代码][代码] [代码][代码]return[代码][代码];[代码][代码] [代码][代码]}[代码][代码] [代码][代码]let saved_file_path = result.savedFilePath;[代码] [代码] [代码][代码]wx.openDocument({[代码][代码] [代码][代码]filePath: saved_file_path,[代码][代码] [代码][代码]fileType: [代码][代码]'pdf'[代码][代码],[代码][代码] [代码][代码]complete: [代码][代码]function[代码] [代码](result) {[代码][代码] [代码][代码]console.log(result);[代码][代码] [代码][代码]}[代码][代码] [代码][代码]});[代码][代码] [代码][代码]// console.log( saved_file_path );[代码][代码] [代码][代码]// wx.chooseMessageFile({[代码][代码] [代码][代码]// count:1,[代码][代码] [代码][代码]// type: 'all',[代码][代码] [代码][代码]// success(res) {[代码][代码] [代码][代码]// // tempFilePath可以作为img标签的src属性显示图片[代码][代码] [代码][代码]// console.log(res );[代码][代码] [代码][代码]// }[代码][代码] [代码][代码]// });[代码][代码] [代码][代码]}[代码][代码] [代码][代码]});[代码][代码] [代码][代码]}[代码][代码]});[代码]
2019-04-10 - 云开发获取不到小程序码
- 当前 Bug 的表现(可附上截图) 以同样的代码,用云函数获取二维码,再上传到云存储,其中一个小程序上传的图片始终无法打开; 图片可以生成,但无法打开,无缩略图 [图片] - 预期表现 - 复现路径 - 提供一个最简复现 Demo 云函数端代码: exports.main = async (event, context) => { const token = event.token; let fStream = await got('https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token='+token,{ method: 'POST', headers:{ 'Content-Type':'application/json' }, body:JSON.stringify({ "path": "pages/index/index", "width": 300, "scene": "id=" + event.userInfo.openId, }) }) return await cloud.uploadFile({ cloudPath: 'bonegameqrcode/' + event.userInfo.openId + '.png', fileContent: fStream.body, }); }
2018-10-17 - 小程序端调用wx.cloud.uploadfile bug
- 当前 Bug 的表现(可附上截图) 在小程序端调用相同路径进行覆盖写时,并未进行覆盖写,而是使用之前写入的文件 - 预期表现 正常情况下 按照官网提供api,对相同路径进行上传,则会进行覆盖写操作,比如对于图片内容,应当是将流数据从文件开头进行写入,现在猜测的情况可能是对同一路径上传的时候生成了一个文件副本而错误的将文件指向了原文件,具体情况不知 - 复现路径 [代码]function[代码] [代码]ui(){[代码][代码] [代码][代码]return[代码] [代码]new[代码] [代码]Promise([代码][代码]function[代码][代码](resolve,reject){[代码][代码] [代码][代码]for[代码] [代码]([代码][代码]var[代码] [代码]i = 0; i < dbarr.length; i++) {[代码][代码] [代码][代码]const db = wx.cloud.database();[代码][代码] [代码][代码]var[代码] [代码]filePath = dbarr[i];[代码][代码] [代码][代码]var[代码] [代码]cloudPath = [代码][代码]'userimg/'[代码][代码]+bn.data.userid+[代码][代码]'/img'[代码][代码]+i+ [代码][代码]'.png'[代码][代码];[代码][代码]//这里是测试片段[代码][代码] [代码][代码]wx.cloud.uploadFile({[代码][代码] [代码][代码]cloudPath,[代码][代码] [代码][代码]filePath,[代码][代码] [代码][代码]success: res => {[代码][代码] [代码][代码]var[代码] [代码]h = res.fileID;[代码][代码] [代码][代码]update.push(h);[代码][代码] [代码][代码]// console.log('[上传文件] 成功:', res);[代码][代码] [代码][代码]if[代码][代码](update.length==dbarr.length){[代码][代码] [代码][代码]resolve(1);[代码][代码] [代码][代码]}[代码][代码] [代码][代码]},[代码][代码] [代码][代码]fail: e => {[代码][代码] [代码][代码]console.error([代码][代码]'[上传文件] 失败:'[代码][代码], e)[代码][代码] [代码][代码]wx.showToast({[代码][代码] [代码][代码]icon: [代码][代码]'none'[代码][代码],[代码][代码] [代码][代码]title: [代码][代码]'上传失败'[代码][代码],[代码][代码] [代码][代码]})[代码][代码] [代码][代码]},[代码][代码] [代码][代码]complete: () => {[代码][代码] [代码][代码]}[代码][代码] [代码][代码]})[代码][代码] [代码][代码]}[代码] [代码] [代码][代码]});[代码][代码]function[代码] [代码]ui(){[代码][代码] [代码][代码]return[代码] [代码]new[代码] [代码]Promise([代码][代码]function[代码][代码](resolve,reject){[代码][代码] [代码][代码]for[代码] [代码]([代码][代码]var[代码] [代码]i = 0; i < dbarr.length; i++) {[代码][代码] [代码][代码]const db = wx.cloud.database();[代码][代码] [代码][代码]var[代码] [代码]filePath = dbarr[i];[代码][代码] [代码][代码]var[代码] [代码]cloudPath = [代码][代码]'userimg/'[代码][代码]+bn.data.userid+[代码][代码]'/img'[代码][代码]+i+2+ [代码][代码]'.png'[代码][代码]; [代码][代码]//这里是测试片段[代码][代码] [代码][代码]wx.cloud.uploadFile({[代码][代码] [代码][代码]cloudPath,[代码][代码] [代码][代码]filePath,[代码][代码] [代码][代码]success: res => {[代码][代码] [代码][代码]var[代码] [代码]h = res.fileID;[代码][代码] [代码][代码]update.push(h);[代码][代码] [代码][代码]// console.log('[上传文件] 成功:', res);[代码][代码] [代码][代码]if[代码][代码](update.length==dbarr.length){[代码][代码] [代码][代码]resolve(1);[代码][代码] [代码][代码]}[代码][代码] [代码][代码]},[代码][代码] [代码][代码]fail: e => {[代码][代码] [代码][代码]console.error([代码][代码]'[上传文件] 失败:'[代码][代码], e)[代码][代码] [代码][代码]wx.showToast({[代码][代码] [代码][代码]icon: [代码][代码]'none'[代码][代码],[代码][代码] [代码][代码]title: [代码][代码]'上传失败'[代码][代码],[代码][代码] [代码][代码]})[代码][代码] [代码][代码]},[代码][代码] [代码][代码]complete: () => {[代码] [代码] [代码][代码]}[代码][代码] [代码][代码]})[代码][代码] [代码][代码]}[代码] [代码] [代码][代码]})[代码]- 提供一个最简复现 Demo 可以将以上函数直接调用
2018-10-11