Загрузка видеофайла с локального сервера NodeJS

У меня есть функциональное приложение NodeJS, которое конвертирует видеофайлы и помещает их в «преобразованный» каталог. Я использую модули express, http и multer. У меня проблема с загрузкой готовых видео. Разве я не могу увидеть, загрузить законченное видео в браузере, если я просто укажу на него?

т.е. когда я ввожу следующее

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

я получил

Не удается получить файл /converted/converted.avi

Полная часть заголовка моего приложения node

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;
                    });

Использование следующей простой настройки для экспресс-обслуживания статического каталога ДОЛЖНО работать, но

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


person Bachalo    schedule 04.02.2015    source источник
comment
Почему вы ожидаете, что ваш сервер знает, как обрабатывать этот запрос?   -  person SLaks    schedule 04.02.2015


Ответы (1)


Веб-серверы Node.js не обслуживают каталоги, если вы явно не укажете им это.

Если вы используете Express, используйте static() промежуточное ПО, чтобы указать ему обслуживать этот каталог.

person SLaks    schedule 04.02.2015
comment
должно работать, но даже когда я пытаюсь настроить статический каталог, я вижу Cannot GET /public/index.html. Смотрите мой отредактированный вопрос выше... - person Bachalo; 04.02.2015
comment
@eco_bach просто откройте /index.html - person laggingreflex; 04.02.2015
comment
@eco_bach: static() будет обслуживать файлы непосредственно в корне (если вы не укажете иначе). Нет никаких причин для появления public в URL-адресе. - person SLaks; 04.02.2015