小程序云函数下载网络文件上传到云存储中,报 write ECONNRE错误
发布于 5 年前 作者 zhengtao 9108 次浏览 来自 问答

原始需求:小程序前端播放其它网站的网络音频文件,

遇到的问题:我要访问的网站是国外的https,它没有在工信部备案,不算合法域名。然而微信前台https访问要做合法域名校验,无法通过校验,因此,无法通过小程序前端调用。

自己想的解决方法:给小程序增加云开发后台,然后在云开发后台下载资源网站的音频文件到小程序后台云存储中。这样小程序前端就可以成功调用云开发后台的文件。

现问题:在云开发后台把来自其它站点的网络文件下载后,然后上传到云存储中,报错。

1)第一次尝试解决

我的关键代码 如下:

const synthesizeStream = textToSpeech.synthesizeUsingWebSocket(synthesizeParams);//这是来自其它网站的文件流

synthesizeStream.pipe(fs.createWriteStream(filePath));//成功写入本地开发环境的硬盘

使用开发工具 在云开发本地调试是可以运行的,把从第三方发过来的synthesizeStream  通过pipe方法写入到本地磁盘,生成文件。

但是 使用开发工具在云开发网络调试的时候,由于云开发的云存储不可写只可读,不能使用pipe方法所以只能使用官方的api上传文件。      疑问:这和云开发控制台 存储管理菜单下的权限管理子菜单功能有关系吗?

2)第二次尝试解决

我使用如下官方文档的方法

await cloud.uploadFile({

cloudPath: ‘Hello world.mp3’,

fileContent: synthesizeStream

})__
__

报错误:

VM412 index.js:163 Error: errCode: -1 unknown error | errMsg: uploadFile:fail Error: write ECONNABORTED; at uploadFile api; 

    at new CloudSDKError (E:\xcx_englishreading_cloud\cloudfunctions\ibmVoiceCall\node_modules\wx-server-sdk\index.js:4332:28)

    at returnAsCloudSDKError (E:\xcx_englishreading_cloud\cloudfunctions\ibmVoiceCall\node_modules\wx-server-sdk\index.js:4384:16)

    at Object.returnAsFinalCloudSDKError (E:\xcx_englishreading_cloud\cloudfunctions\ibmVoiceCall\node_modules\wx-server-sdk\index.js:4398:13)

    at Cloud.<anonymous> (E:\xcx_englishreading_cloud\cloudfunctions\ibmVoiceCall\node_modules\wx-server-sdk\index.js:3864:62)

    at step (E:\xcx_englishreading_cloud\cloudfunctions\ibmVoiceCall\node_modules\tslib\tslib.js:133:27)

    at Object.throw 

望解答疑问。感谢。

3 回复

老板,您这多大的生意呀,都做到国外去了。刚需的话不能定时同步在自己服务器上嘛,我也是醉了。。。

只能通过第二种方案,但是你的问题应该是出在synthesizeStream这个数据流上,uploadFile接口的fileContent只接受Buffer或fs.ReadStream,你可以试试将websocket改成直接http请求获取Buffer,再通过uploadFile接口上传。

坐等小程序云开发官方来解答难道是让我弃用小程序云开发__,转去腾讯云 再重新写一个服务器后台?这样就不省事了__

回到顶部