用wx.uploadFile上传图片到腾讯cos后,都是被修改文件名的吗?
- 需求的场景描述(希望解决的问题)
用wx.uploadFile上传图片到腾讯cos后,文件名被自动修改成“随机数字与字母的组合”
- 希望提供的能力
希望用wx.uploadFile上传图片到腾讯cos后,文件名保持不变!!!
用wx.uploadFile上传图片到腾讯cos后,文件名被自动修改成“随机数字与字母的组合”
希望用wx.uploadFile上传图片到腾讯cos后,文件名保持不变!!!
你好,首先感谢您选择 Wafer 方案。
前端 wx.uploadFile 上传的时候使用 content-type 是 multipart/form-data,这个目前 koa-bodyparser 是不支持的,
具体可以看这个 issue:https://github.com/koajs/bodyparser/issues/98
解决方案有两个:
使用 multiparty 这个库,在逻辑里再解析一次请求体,具体使用可以看 sdk 里的代码:https://image.wxopen.club/content_5077fbbe-3737-11ea-b918-a0999b08aadb.png
修改 app.js 里面的中间件,使用 koa-body 这个库(https://image.wxopen.club/content_51359f16-3737-11ea-b918-a0999b08aadb.png)做请求体解析,这样无需第二次解析,但是需要重新安装依赖。
对我刚才12楼的步骤②有遗漏,因此更正为:
步骤②
在 “server\app.js” 中引入koa-body,如下图
// 解析请求体//app.use(bodyParser()) //注释掉例程原本的解析方式app.use(koaBody({ multipart: true })) //改用koa-body解析方式 |
@Jason 谢谢你提供的建议!
你提的方案一:在multipart内部再解析一次请求体。我看了你链接的文章,没明白是如何再次解析的。所以改用方案二。
我是如下实施方案二的:
① 在 “server\package.json” 中添加依赖“koa-body”,如下图,并在本地用“npm install”进行安装。
② 在 “server\app.js” 中引入koa-body,如下图
③ 在 “server\routes\index.js” 中引入koa-body,如下图
并用注释掉例程原本的’/upload’路由语句,改为
router.post(‘/upload’, koaBody(), controllers.upload)
如下图
④ 在 “server\controllers\upload.js” 中添加打印请求头,如下图
const { uploader } = require('../qcloud')module.exports = async ctx => { // 以下打印requsest是我增加的,希望能看到上传图片时顺带的formData数据 // 但我启动服务器端设断点调试后,发现打印出来的ctx.request里面找不到formData数据 console.log('ctx.request.body= \n') console.log(ctx.request.body) // 以下程序是wafer例程原本就有的,实现了图片上传到COS中 const data = await uploader(ctx.req) ctx.state.data = data} |
但是:我在服务器断点查看打印输出的里面,依然没有找到wx.uploadFile中携带的formData数据。
是不是我的上述步骤有问题?或者有什么遗漏的地方?