小程序
小游戏
企业微信
微信支付
扫描小程序码分享
- 需求的场景描述(希望解决的问题)
用wx.uploadFile上传图片到腾讯cos后,文件名被自动修改成“随机数字与字母的组合”
- 希望提供的能力
希望用wx.uploadFile上传图片到腾讯cos后,文件名保持不变!!!
12 个回答
加粗
标红
插入代码
插入链接
插入图片
上传视频
请去翻和阅读koa的文档
你好,麻烦通过点击下方“反馈信息”按钮,提供出现问题的。
目前不支持自定义文件名,我们记录下需求
router.post 那里不需要再次使用 koabody 了
Jason你好,我是按照这个帖子来处理的,但是一直报错:
{code: -1, error: "stream ended unexpectedly"}
其他论坛上说是koabody导致的。。这个我应该怎么处理呢?谢谢
对我刚才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数据。
是不是我的上述步骤有问题?或者有什么遗漏的地方?
你好,首先感谢您选择 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)做请求体解析,这样无需第二次解析,但是需要重新安装依赖。
@古月D杰 谢谢你能回复我!
我用的是github上down下来的
@傅杰
你用的代码是创建项目时开发工具内置好的呢?还是自己在github上down下来的?
我是用的你们官方的wafer2例程(客户端+服务器)
客户端的上传图片部分,我只是增加了formData
服务器端的我用node.js,我只是在接收图片路由到\server\controllers\upload.js,在里面增加了打印接收到的ctx.request
请问你是用的开发工具内置的quickstart代码吗
正在加载...
关注后,可在微信内接收相应的重要提醒。
请使用微信扫描二维码关注 “微信开放社区” 公众号
请去翻和阅读koa的文档
目前不支持自定义文件名,我们记录下需求
router.post 那里不需要再次使用 koabody 了
Jason你好,我是按照这个帖子来处理的,但是一直报错:
{code: -1, error: "stream ended unexpectedly"}
其他论坛上说是koabody导致的。。这个我应该怎么处理呢?谢谢
对我刚才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数据。
是不是我的上述步骤有问题?或者有什么遗漏的地方?
你好,首先感谢您选择 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)做请求体解析,这样无需第二次解析,但是需要重新安装依赖。
@古月D杰 谢谢你能回复我!
我用的是github上down下来的
@傅杰
你用的代码是创建项目时开发工具内置好的呢?还是自己在github上down下来的?
@古月D杰 谢谢你能回复我!
我是用的你们官方的wafer2例程(客户端+服务器)
客户端的上传图片部分,我只是增加了formData
服务器端的我用node.js,我只是在接收图片路由到\server\controllers\upload.js,在里面增加了打印接收到的ctx.request
@傅杰
请问你是用的开发工具内置的quickstart代码吗