Как я могу загрузить файл, который находится на моем сервере, на мой компьютер, который обращается к странице на сервере nodeJS?
Я использую ExpressJS, и я пытался это:
app.get('/download', function(req, res){
var file = fs.readFileSync(__dirname + '/upload-folder/dramaticpenguin.MOV', 'binary');
res.setHeader('Content-Length', file.length);
res.write(file, 'binary');
res.end();
});
Но я не могу получить имя файла и тип файла (или расширение). Кто-нибудь может мне помочь с этим?
Ответы:
Обновить
У Express есть помощник для облегчения жизни.
Старый ответ
Что касается вашего браузера, имя файла просто «скачать», поэтому вам нужно дать ему больше информации, используя другой заголовок HTTP.
Вы также можете отправить MIME-типа, такие как это:
Если вы хотите что-то более глубокое, здесь вы идете.
Вы можете установить значение заголовка на то, что вам нравится. В этом случае я использую библиотеку MIME-типов - node-MIME , чтобы проверить, что MIME-тип файла.
Еще одна важная вещь, на которую следует обратить внимание, это то, что я изменил ваш код для использования readStream. Это гораздо лучший способ сделать что-то, потому что использование любого метода с 'Sync' в имени не одобряется, потому что узел должен быть асинхронным.
источник
res.setHeader('Content-disposition', 'attachment; filename=' + filename);
tnx!.set()
вместо.setHeader()
Btwиспользование
res.download()
Он передает файл по пути как «вложение». Например:
res.download()
источник
nodejs proxy file download response
лучшей практикиДля статических файлов, таких как PDF-файлы, Word-документы и т. Д., Просто используйте статическую функцию Express в вашей конфигурации:
А затем просто поместите все свои файлы в эту «общую» папку, например:
И тогда обычная старая ссылка позволит пользователю скачать ее:
источник
this.use('/topsecret', mGetLoggedInUser, mEnsureAccess, express.static('topsecret'))
... и затем каждый запрос проходит через mEnsureAccess. Конечно, это означает, что вам нужно будет определить уровень доступа пользователя только на основе URL защищенного документа или чего-либо еще.В Express 4.x есть
attachment()
способResponse
:источник
источник
Вот как я это делаю:
Код:
источник
window.open("/api/get_audio_file");
, см .: stackoverflow.com/a/20177012