用wx.uploadFile上传图片到腾讯cos后,都是被修改文件名的吗?
发布于 6 年前 作者 mzeng 6074 次浏览 来自 问答
  • 需求的场景描述(希望解决的问题)

用wx.uploadFile上传图片到腾讯cos后,文件名被自动修改成“随机数字与字母的组合”

  • 希望提供的能力

希望用wx.uploadFile上传图片到腾讯cos后,文件名保持不变!!!

10 回复

@古月D杰    谢谢你能回复我!

我用的是github上down下来的

router.post 那里不需要再次使用 koabody 了

你好,首先感谢您选择 Wafer 方案。

前端 wx.uploadFile 上传的时候使用 content-type 是 multipart/form-data,这个目前 koa-bodyparser 是不支持的,

具体可以看这个 issue:https://github.com/koajs/bodyparser/issues/98

解决方案有两个:

  1. 使用 multiparty 这个库,在逻辑里再解析一次请求体,具体使用可以看 sdk 里的代码:https://image.wxopen.club/content_5077fbbe-3737-11ea-b918-a0999b08aadb.png

  2. 修改 app.js 里面的中间件,使用 koa-body 这个库(https://image.wxopen.club/content_51359f16-3737-11ea-b918-a0999b08aadb.png)做请求体解析,这样无需第二次解析,但是需要重新安装依赖。

对我刚才12楼的步骤②有遗漏,因此更正为:

步骤②

 “server\app.js” 中引入koa-body,如下图

更正我12楼的步骤②,为如下:

② 在 “server\app.js” 中引入koa-body,如下图
然后将
// 解析请求体
//app.use(bodyParser())         //注释掉例程原本的解析方式
app.use(koaBody({ multipart: true })) //改用koa-body解析方式

请去翻和阅读koa的文档

@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数据。

是不是我的上述步骤有问题?或者有什么遗漏的地方?


@傅杰

你用的代码是创建项目时开发工具内置好的呢?还是自己在github上down下来的?

@古月D杰    谢谢你能回复我!

我是用的你们官方的wafer2例程(客户端+服务器)

客户端的上传图片部分,我只是增加了formData

服务器端的我用node.js,我只是在接收图片路由到\server\controllers\upload.js,在里面增加了打印接收到的ctx.request

目前不支持自定义文件名,我们记录下需求

@傅杰

请问你是用的开发工具内置的quickstart代码吗

回到顶部