评论

云开发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 //koa2后台接收到文件组,需要npm koa-body且multipart : true

    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) //得到access_token


        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

                    }

                }

            }

        }

       

        ctx.body = await request(options) //上传文件,cox.body返回结果给前端


    } catch (err) {

        console.log(err.stack)

    }


}

最后一次编辑于  02-13  
点赞 2
收藏
评论

10 个评论

  • 刘学帅
    刘学帅
    04-06

    请问axios怎么弄

    04-06
    赞同
    回复 3
    • 老张
      老张
      04-06
      浏览器端的吗?http api必须在服务器上实现,前端没戏。
      04-06
      回复
    • 刘学帅
      刘学帅
      04-07回复老张
      node使用axios发送请求 因为前端用axios比较多 就没用rp
      04-07
      回复
    • 老张
      老张
      04-07回复刘学帅
      你可以先用rp调通,再对照两者的参数改成awios。
      04-07
      回复
  • 十二
    十二
    03-30

    请问这里的返回结果是什么?

    03-30
    赞同
    回复 1
    • 老张
      老张
      04-07
      好象什么都没有。只是让前端知道结束了。
      04-07
      回复
  • 十二
    十二
    03-30

    请问我上传的图片无法显示是什么原因?


    03-30
    赞同
    回复
  •  
     
    02-09

    请问,如果我已知文件路径了,应该如何操作??我做了给按键上传,但是我想做自动上传的。就是在用npm的chokidar监听文件夹并得到了变化的文件的路径,可是不知道怎么自动上传

    02-09
    赞同
    回复 7
    • 老张
      老张
      02-10
      都要下载到本地后,再上传到http api
      02-10
      回复
    •  
       
      02-10
      现在有个问题是上传图片需要文件的File属性,现在用的是input,但是我想的是自动上传,其中已知的是文件的路径。百度之后只有input和drag的方法都是要人去操作,我就比较迷茫了
      02-10
      回复
    •  
       
      02-10
      02-10
      回复
    •  
       
      02-10
      我想问的是有没有已知图片路径,自动得到文件的File属性的方法
      02-10
      回复
    •  
       
      02-10回复老张
      就是遇到这样的问题,没法自动通过文件路径得到File,用input的话就不自动了。百度了好多就是没找到解决办法
      02-10
      回复
    查看更多(2)
  •  
     
    02-09

    请问ctx具体是什么参数??是文件的路径吗


    02-09
    赞同
    回复 1
    • 老张
      老张
      02-10
      ctx是nodejs koa2里的东西,http request的上下文。
      02-10
      回复
  • gggo
    gggo
    2019-10-28

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

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

    这个是fileData的内容

    这个是报错

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

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

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


    2019-10-11
    赞同
    回复
  • 一念之间
    一念之间
    2019-09-05


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

    2019-09-05
    赞同
    回复 4
  • 一念之间
    一念之间
    2019-09-05

    这块不是很懂请教大佬

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

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

    2019-09-05
    赞同
    回复
登录 后发表内容