收藏
回答

用wx.uploadFile上传图片到腾讯cos后,都是被修改文件名的吗?

问题模块 框架类型 问题类型 API/组件名称 终端类型 操作系统 微信版本 基础库版本
API和组件 小程序 需求 wx.uploadFile 客户端 Android 6.6 2.0

- 需求的场景描述(希望解决的问题)

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


- 希望提供的能力

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

最后一次编辑于  2018-04-26
回答关注问题邀请回答
收藏

12 个回答

  • 林超
    林超
    2018-04-27

    请去翻和阅读koa的文档

    2018-04-27
    赞同 1
    回复
  • 林超
    林超
    2018-04-26

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

    2018-04-26
    赞同
    回复
  • Jason
    Jason
    2018-05-10

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

    2018-05-10
    赞同
    回复 1
    • Anna Lu夜战八方哒叭将
      Anna Lu夜战八方哒叭将
      2018-10-11

      Jason你好,我是按照这个帖子来处理的,但是一直报错:

      {code: -1, error: "stream ended unexpectedly"}

      其他论坛上说是koabody导致的。。这个我应该怎么处理呢?谢谢

      2018-10-11
      回复
  • 傅杰
    傅杰
    2018-04-27

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


    步骤②

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

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

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


    2018-04-27
    赞同
    回复
  • 傅杰
    傅杰
    2018-04-27

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


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




    2018-04-27
    赞同
    回复
  • Jason
    Jason
    2018-04-27

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

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

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

    解决方案有两个:

    1. 使用 multiparty 这个库,在逻辑里再解析一次请求体,具体使用可以看 sdk 里的代码:https://github.com/tencentyun/wafer2-node-sdk/blob/master/lib/upload/index.js#L52

    2. 修改 app.js 里面的中间件,使用 koa-body 这个库(https://github.com/dlau/koa-body)做请求体解析,这样无需第二次解析,但是需要重新安装依赖。

    2018-04-27
    赞同
    回复
  • 傅杰
    傅杰
    2018-04-27

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


    我用的是github上down下来的

    2018-04-27
    赞同
    回复
  • 古月D杰
    古月D杰
    2018-04-27

    @傅杰

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

    2018-04-27
    赞同
    回复
  • 傅杰
    傅杰
    2018-04-27

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


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

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

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




    2018-04-27
    赞同
    回复
  • 古月D杰
    古月D杰
    2018-04-27

    @傅杰

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

    2018-04-27
    赞同
    回复

正在加载...