时间:2019-05-05 来源:小程序工厂
林***:
目前不支持自定义文件名,我们记录下需求
傅***:
@林超,谢谢你能回复!
再请教下:
我在wx.uploadFile 中
设定了formData值 例如 formData: { filename: 'abc123' }
但是:
当服务器端node.js对此路由成功后,我通过
console.log(ctx.request)
打印输出后,却没有找到 formData里面设定的数据。
那么我的新问题是:
用wx.uploadFile传送的formData数据,我在服务器端node.js中该如何读取?
微信小程序微信小程序小游戏
林***:
请去翻和阅读koa的文档
傅***:
@林超 谢谢你能回复我!
koa对http请求的相应流程我是知道。
因为上传图片是用的你们wafer2里面的例程,我只是增加了formData的数据,希望利用formData来顺便上传图片的文件名,程序片段如下:
// 上传图片
wx.uploadFile({ // 内部默认采用post方法
url: config.service.uploadUrl, // 待上传服务器的url = `${host}/weapp/upload`
filePath: filePath,
name: 'file', // 这个不能任意设置,因为服务器端程序会以此来判断
formData: { // 我希望通过这个formData来顺带上传图片的文件名
filename: 'abc123' // 但这个formData好像服务器端无法收到,是不是客户端根本就没有发出?
},
服务器端node.js能够成功路由到upload.js
我在upload.js中增加了打印req的程序,程序如下:
const { uploader } = require('../qcloud')
module.exports = async ctx => {
// 以下打印requsest是我增加的,希望能看到上传图片时顺带的formData数据
// 但我启动服务器端设断点调试后,发现打印出来的ctx.request里面找不到formData数据
console.log('ctx.request= \n')
console.log(ctx.request)
// 以下程序是wafer例程原本就有的,实现了图片上传到COS中
const data = await uploader(ctx.req)
ctx.state.data = data
}
我启动服务器端设断点调试后,发现打印出来的ctx.request里面找不到formData数据!!!如下图:
服务器端从此处继续向下执行,可以把上传的图片成功保存到cos中,说明node.js的koa没有问题。
我怀疑:
wx.uploadFile没有把formData上传给服务器,是吗?
或许我的formData设置不符合微信wx.uploadFile函数的要求?
古***:
@傅杰
请问你是用的开发工具内置的quickstart代码吗
时间戳循环转换##微信小程序开发教程
傅***:
@古月D杰 谢谢你能回复我!
我是用的你们官方的wafer2例程(客户端+服务器)
客户端的上传图片部分,我只是增加了formData
服务器端的我用node.js,我只是在接收图片路由到\server\controllers\upload.js,在里面增加了打印接收到的ctx.request
古***:
@傅杰
你用的代码是创建项目时开发工具内置好的呢?还是自己在github上down下来的?
傅***:
@古月D杰 谢谢你能回复我!
我用的是github上down下来的
我开通了微信小程序能免费开通订阅号吗? 微信小程序开发教程
J***: 你好,首先感谢您选择 Wafer 方案。前端 wx.uploadFile 上传的时候使用 content-type 是 multipart/form-data,这个目前 koa-bodyparser 是不支持的,具体可以看这个 issue:https://github.com/koajs/bodyparser/issues/98解决方案有两个:使用 multiparty 这个库,在逻辑里再解析一次请求体,具体使用可以看 sdk 里的代码:https://github.com/tencentyun/wafer2-node-sdk/blob/master/lib/upload/index.js#L52修改 app.js 里面的中间件,使用 koa-body 这个库(https://github.com/dlau/koa-body)做请求体解析,这样无需第二次解析,但是需要重新安装依赖。傅***:
@Jason 谢谢你提供的建议!
你提的方案一:在multipart内部再解析一次请求体。我看了你链接的文章,没明白是如何再次解析的。所以改用方案二。
我是如下实施方案二的:
① 在 “server\package.json” 中添加依赖“koa-body”,如下图,并在本地用“npm install”进行安装。