2

Я пишу приложение HTML WYSIWYG. После того, как пользователь отредактирует веб-страницу, они должны будут нажать кнопку загрузки и попросить их браузер сохранить их отредактированную веб-страницу. Я не хочу хранить отредактированную веб-страницу на своем сервере, но отправлю файл на локальный компьютер.Скачать файл в NodeJS

До сих пор в моем приложении, я могу изменить шаблон, захватить его HTML, когда пользователь нажимает на кнопку загрузки, и используя fs.createWriteStream метод NodeJS'S, писать HTML для вновь созданного HTML-файла. Однако он создает файл на моем сервере вместо запроса браузера сохранить файл в папке «Загрузка». Я использую Socket.io, чтобы сообщить серверу загрузить содержимое HTML.

После исследования выяснилось, что для того, чтобы браузер предложил пользователю сохранить файл загрузки, HTTP-заголовки должны быть установлены с помощью заголовка Content-Disposition: attachment.

В кратком изложении, когда пользователь нажимает кнопку загрузки в своем приложении, что мне делать, чтобы новый файл был создан и сохранен непосредственно на локальном компьютере пользователя, а не на моем сервере?

Это то, что я в моем server.js файле:

io.sockets.on('connection', function(socket) { 
    socket.on('downloadHTML', function(data) { 
     var file = fs.createWriteStream('PearlEdit-template-Martketing.html', {flags: 'w'}) 
       .write(data.html); 
    }); 

}); 
+2

Просто служить файл с соответствующими заголовками при щелчке ссылки не используйте веб-сайты для этого – adeneo

+0

Я не уверен на 100%, что вы имеете в виду. Не могли бы вы уточнить? – Rashad

ответ

3

Вы можете просто использовать что-то вроде этого (ответ на который ссылается из here)

app.get('/download', function(req, res){ 

    var file = __dirname + '/upload-folder/dramaticpenguin.MOV'; 

    var filename = path.basename(file); 
    var mimetype = mime.lookup(file); 

    res.setHeader('Content-disposition', 'attachment; filename=' + filename); 
    res.setHeader('Content-type', mimetype); 

    var filestream = fs.createReadStream(file); 
    filestream.pipe(res); 
}); 
+3

Что делать, если я не хочу использовать Express? –

Смежные вопросы