从本地NodeJS服务器下载视频文件

时间:2015-02-04 16:19:35

标签: node.js air download binaryfiles urlloader

我有一个功能NodeJS应用程序,它可以转换视频文件并将它们放入“转换后的”文件中。目录。我正在使用 express http multer 模块。我遇到的问题是下载完成的视频。如果我只是指向它,我是不是能够看到,在浏览器中加载完成的视频?

即我输入以下内容

http://localhost:8080/converted/converted.avi

我得到了

  

无法获得/converted/converted.avi

我的节点应用程序的完整标题部分是

var express = require('express');
var app = express();
    var multer  = require('multer'),
           fs = require('fs'),
       ffmpeg =  require('./lib/fluent-ffmpeg');

    var server = require('http').createServer(app);
    var io = require('socket.io').listen(server,{transports:['flashsocket', 'websocket', 'htmlfile', 'xhr-polling', 'jsonp-polling']});

    var port = Number(8080);
    server.listen(port);

    app.use(multer({ dest: './uploads/'}));

可能不相关,因为还有其他问题,但这是我用于Adobe AIR客户端进行实际下载的实际代码
(参考http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/net/URLLoader.html

 _urlLoader = new URLLoader();
                _urlLoader.dataFormat = URLLoaderDataFormat.BINARY;
                _urlLoader.addEventListener(Event.COMPLETE,
                    function(e:Event):void
                    {
                        var air:File = File.desktopDirectory.resolvePath("converted.mp4");
                        //var file:File = File.desktopDirectory.resolvePath("AIR Test");
                        var fs:FileStream = new FileStream();
                        fs.open(air, FileMode.WRITE);
                        fs.writeBytes(_urlLoader.data);
                        fs.close();
                        air.downloaded = true;
                    });

使用以下简单的express设置来提供静态目录应该可以工作但

var express = require('express');
var app = express();

console.log('static and __dirname = '+__dirname)
app.use(express.static(__dirname+'/public'));

app.listen(process.env.PORT || 3000);

当我在服务器公用文件夹中删除一个简单的index.html时,我仍然只能在浏览器中获得以下内容......

  

无法获取/public/index.html

1 个答案:

答案 0 :(得分:2)

除非您明确告诉他们,否则Node.js Web服务器不会提供目录。

如果您使用的是Express,请使用static() middleware告诉它提供该目录。