视频上传到七牛,后台报错

来源:

manny

2016-10-30

http://szimg.mukewang.com/581575ae0001447914820916.jpg

写回答

7回答

Scott

2016-11-07

Promise.all({ Video.findOne({_id: videoId}).exec(), Audio.findOne(query).exec() })


all 里面应该要传一个数组而不是对象:


Promise.all([ Video.findOne({_id: videoId}).exec(), Audio.findOne(query).exec() ])

0
0

Scott

2016-11-06

exports.video = function *(next) {
  var body = this.request.body
  var videoData = body.video
  var user = this.session.user
  if (!videoData || !videoData.key) {
    this.body = {
      success: false,
      err: '视频没有上传成功!'
    }
    return next
  }
  var video = yield Video.findOne({
    qiniu_key: videoData.key
  })
  .exec()
  if (!video) {
    video = new Video({
      author: user._id,
      qiniu_key: videoData.key,
      persistentId: videoData.persistentId
    })
    video = yield video.save()
  }
  var url = config.qiniu.video + video.qiniu_key
  robot
    .uploadToCloudinary(url)
    .then(function(data) {
      if (data && data.public_id) {
        video.public_id = data.public_id
        video.detail = data
        video.save().then(function(_video) {
          asyncMedia(_video._id)
        })
      }
    })
  this.body = {
    success: true,
    data: video._id
  }
}


这是我的代码,可以比对下。另外,里面的的 api key secret 什么的,一定换成自己的哈


在 var url = config.qiniu.video + video.qiniu_key 前面加一下 console.log(video) 看看这个 video 是什么,然后看能不能通过地址直接访问到这个 video 地址。

0
1
manny
还有这个 Video.findOne 会报错,中间点报错, node app 启动报错 Promise.all({ Video.findOne({_id: videoId}).exec(), Audio.findOne(query).exec() })
2016-11-06
共1条回复

Scott

2016-10-30

应该是请求挂了吧,对请求里面的 err 打印一下看看,看看请求挂的原因是什么,这个 rejection 貌似是没有捕获这个错误导致

0
3
Scott
回复
慕粉3316582
是从 app 里面前端直接上传到 cloudinary 对吧,要不这样吧,先往后面跟代码,这里跳过一下,因为后面就把这块逻辑改掉了,改成了 audio 和 video 都往七牛上传,之后是在服务器端,对七牛的音视频和 cloudinary 这里做了一个同步,这种方案更简单一些。 cloudinary 的缺点是上传会不稳定,且比较慢,容易超时,最终还是要用七牛
2017-04-27
共3条回复

manny

提问者

2016-11-06

console.log(video) 
    var url = config.qiniu.video + video.qiniu_key
    
    robot
        .uploadToCloudinary(url)
        .then(function(data){
            if(data && data.public_id){
                video.public_id = data.public_id
                video.detail = data

                video.save().then(function(_video){
                    asyncMedia(_video._id )
                })
            }
        })
        .catch((err) => {
            console.log(err)
        })

    this.body = {
        success: true,
        data: video._id
    }

api key secret 我检查了是我自己账号的


打印了video

zhoujialindembp:imoocServer shadow$ node app
Listening: 1234
  <-- POST /api/signature
  --> POST /api/signature 200 62ms 319b
  <-- POST /api/creations/video
{ __v: 0,
  author: 580383804be040367c11643e,
  qiniu_key: '243974bb-766a-47c2-a407-df83c4adae64.mp4',
  persistentId: 'z0.581f39df45a2655db7826c40',
  _id: 581f39df4226b5dc59e94efb,
  meta: 
   { updateAt: Sun Nov 06 2016 22:10:39 GMT+0800 (CST),
     createAt: Sun Nov 06 2016 22:10:39 GMT+0800 (CST) } }
  --> POST /api/creations/video 200 105ms 50b
{ error: 
   { [Error: ENOENT: no such file or directory, open 'ofuein66v.bkt.clouddn.com243974bb-766a-47c2-a407-df83c4adae64.mp4']
     errno: -2,
     code: 'ENOENT',
     syscall: 'open',
     path: 'ofuein66v.bkt.clouddn.com243974bb-766a-47c2-a407-df83c4adae64.mp4' } }


0
0

manny

提问者

2016-11-06

robot.js文件里


cloudinary.config(config.cloudinary)


exports.uploadToCloudinary = function(url){

     return new Promise(function(resolve, reject){

     cloudinary.uploader.upload(url, function(result){

     if(result && result.public_id){

     resolve(result)

     }else{

     reject(result)

     }

     }, {

     resource_type: 'video',

     folder: 'video'  //指定上传到哪个文件夹下

     })

     })

}



0
0

manny

提问者

2016-11-05

你代码里写也是这样地址

//szimg.mukewang.com/581dbaf40001f3dc20441894.jpg

0
0

manny

提问者

2016-10-30

打印错误

//szimg.mukewang.com/5815d42e0001d3c514160906.jpg

下面截图这段代码,是异步将视频上传到 cloudinary 上, 为什么 url 地址拼接是是七牛的

//szimg.mukewang.com/5815d4560001d56c12841266.jpg

//szimg.mukewang.com/5815d4d3000108b319561122.jpg




0
4
manny
回复
Scott
不行还是报错了,麻烦你看下 { message: 'Resource not found - https://api.cloudinary.com/v1_1/dk7g9s6hq/video/upload4936f1ac-f7ac-4df8-b2e4-3e8e7c9f5972.mp4', http_code: 404 } }
2016-11-06
共4条回复

贯穿全栈React Native开发App

全面掌握React Native技术,不止步前端开发,让你移动领域大放光彩

946 学习 · 385 问题

查看课程