评论

云开发http上传文件代码

已运行通过的http上传文件的node代码。 请勿照抄,看懂后按你自己的需求修改。 后台运行环境:koa



const request = require('request-promise')

const config = require('./config');

const fs = require('fs')


module.exports = async (ctx) => {


    const files = ctx.request.files

    let file = files[0]


    try {


        let options = {

            uri: 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=' + config.appId +'&secret=' + config.appSecret + '',

            json:true

        }

        let {access_token} = await request(options)


        let fileName = `example.jpg`

        let filePath = `dir/${fileName}`

        options = {

            method: 'POST',

            uri: 'https://api.weixin.qq.com/tcb/uploadfile?access_token=' + access_token + '',

            body: {

                "env": 'cloud-a8eeXX',

                "path": filePath,

            },

            json: true

        }

        let res = await request(options)

        options = {

            method: 'POST',

            uri: res.url,

            formData: {

                "Signature": res.authorization,

                "key": filePath,

                "x-cos-security-token": res.token,

                "x-cos-meta-fileid": res.cos_file_id,

                "file": {

                    value: fs.createReadStream(file.path),

                    options: {

                        filename: fileName,

                        contentType: file.type

                    }

                }

            }

        }

        await request(options)

        ctx.body = ''


    } catch (err) {

        console.log(err.stack)

    }


}


最后一次编辑于  09-05  (未经腾讯允许,不得转载)
点赞 0
收藏
评论

5 个评论

  • gggo
    gggo
    10-28

    你好,如果有空的话希望能帮我看看,我实在想不出解决办法了

    这个是我想用来上传的代码

    这个是fileData的内容

    这个是报错

    是不是我的post请求拼装的有问题或者是我哪里想错了,希望能帮帮我谢谢~

    10-28
    赞同
    回复 4
    • 老张
      老张
      10-28
      fileName:'123.jpg'。既然说是name未定义,fileName写固值调试一下呗。
      10-28
      回复
    • gggo
      gggo
      10-28回复老张
      我改成这样子的还是报错“未定义”,然后通过ctrl加左键去定位出错的这个地方,打印结果一个是authorization 字段的值和一个空对象,这就很迷了,我很绝望...
      10-28
      回复
    • 老张
      老张
      10-28回复gggo
      这不就是简单的常见的错误吗?227行的value.name出错吗?调试呗。
      10-28
      回复
    • 老张
      老张
      10-28回复gggo
      另外,第二图说的是promise用法错。
      10-28
      回复
  • 豆豆
    豆豆
    10-11

    大佬成功后有获取到访问地址吗


    10-11
    赞同
    回复
  • 梦
    09-05


    我这样写的云函数对吗那改错了?他会报错

    09-05
    赞同
    回复 4
    • 老张
      老张
      09-05
      你获得file的代码呢?
      09-05
      1
      回复
    • 梦
      09-05回复老张
      我需要把getFile()获取file方法写出来,对吧
      09-05
      回复
    • 老张
      老张
      09-05回复
      更新了代码。
      09-05
      1
      回复
    • 梦
      09-05回复老张
      谢谢大佬
      09-05
      回复
  • 梦
    09-05

    这块不是很懂请教大佬

    09-05
    赞同
    回复 1
    • 老张
      老张
      09-05
      file指你后台接收到的文件对象。
      09-05
      1
      回复
  • 梦
    09-05

    你好,为什么我把代码copy以后把环境变量换成我的运行不了?

    09-05
    赞同
    回复