IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    如何使用Express.js 下载 视频文件

    sialvsic发表于 2016-05-15 11:31:43
    love 0

    新人 一枚 大四毕业生 正在写一个 视频网站 现在遇到一点问题 google未果后,求助各位; 开发环境: linux ubuntu12.04.01 LTS chrome 49.xx 问题描述: 本人 使用superagent 在前台发送下载的请求 ,向后台发送一个视频的ID 代码

            var request = require('superagent');
    		var errorHandler = require('../../../../middleware/error-handler');
    				
            onDownload: function(videoId) {
            var url = '/video/download/' + videoId;
            request.get(url)
                .set('Content-Type', 'application/json')
                .use(errorHandler)
                .end((err, req) => {
                    if(err){
                      console.log(err.message);
                    }
                });
        }
    

    server部分 使用 Express 处理逻辑写到了 controller 中

    //下载视频
    VideoController.prototype.download = (req, res, next) => {
    
        var videoId = req.params.videoId;
        videoId = mongoose.Types.ObjectId(videoId);
    
        async.waterfall([
            (done) => {
                //然后查找用户,更新用户的收藏列表
                Video.findOne({
                    _id: videoId
                }, done);
            }
        ], (err, data) => {
            if (err) return next(err);
            //console.log('download');
            //console.log(data.path);
            //public/video/All My Love Is For You-少女时代.mp4
    
            //尝试方法1   使用Express自带的 res.download 方法
            var file = __dirname + '/../' + data.path;
            file  = path.resolve(file);
            res.download(file);
            //结果,未报错 但是并没有下载的反应
    
            //尝试方法2 设置headers
            var time = moment.unix(new Date() / 1000).format('YYYY-MM-DD');
            var fileName = time + '.mp4';
            var file = __dirname + '/../' + data.path;
            file  = path.resolve(file);
    
            res.setHeader('Content-disposition', 'attachment; filename=' + fileName + '');
            res.setHeader('Content-Type', 'video/mpeg4');
            res.send(file);   不行 未报错 但是并没有下载的反应
            res.sendFile(file);   也不行 未报错 但是并没有下载的反应
            res.download(file);   不行 未报错 但是并没有下载的反应
    
    
            //尝试方法3  在stackoverflow 上看到的
            var time = moment.unix(new Date() / 1000).format('YYYY-MM-DD');
            var fileName = time + '.mp4';
            var file = __dirname + '/../' + data.path;
            file  = path.resolve(file);
    
            res.setHeader('Content-disposition', 'attachment; filename=' + fileName + '');
            res.setHeader('Content-Type', 'video/mp4');
            var filestream = fs.createReadStream(file);
            filestream.pipe(res);
            res.end();
            //结果,未报错 但是并没有下载的反应
    
        });
    };
    

    请问有人知道问题出在能哪里了么? 或者给点建议 或者提示, 十分感谢。



沪ICP备19023445号-2号
友情链接