Prefácio
Ao baixar arquivos com HTTP, você só precisa definir o cabeçalho de resposta relevante no servidor e usar o binário para transmitir dados de arquivo, e o cliente (navegador) receberá dados de arquivo com base no cabeçalho da resposta. No Node.js, depois de definir o cabeçalho da resposta, leia o fluxo de arquivos e transfira o fluxo para a Response do objeto de resposta usando o método “.pipe()” , você pode implementar um servidor de download de arquivo simples.
1. Download de arquivos Introdução
O HTTP implementa a interação do estado com base no cabeçalho da solicitação e no cabeçalho da resposta. Após obter o status de resposta correto do servidor, o cliente analisará primeiro o cabeçalho da resposta e receberá e exibirá dados (corpo de resposta) com base no cabeçalho da resposta. Para download de arquivos, o processo de implementação é o seguinte:
1. O cliente inicia uma solicitação de recurso de arquivo
2. O servidor procura o arquivo correspondente e define cabeçalhos de resposta, como " Content-Type " e " Content-Disposition ", para representar o tipo "MIME" e a descrição do arquivo do arquivo, respectivamente.
3. O cliente analisa e recebe dados de arquivo com base no cabeçalho da resposta retornado pelo servidor.
Cabeçalho de resposta que precisa ser definido
Ao configurar os cabeçalhos de resposta do download do arquivo, além dos cabeçalhos de resposta HTTP comumente usados, é mais importante definir os dois cabeçalhos de resposta a seguir:
Tipo de conteúdo: Aplicativo/Octet-StreamContent-Disposição: Anexo; arquivo de arquivo = myFileName.ext
Nas configurações acima, " Content-Type: application/octet-stream " diz ao navegador que este é um arquivo binário, e a " Content-Disposition " diz ao navegador que este é um anexo que precisa ser baixado e diz ao navegador o nome do arquivo padrão. Se o cabeçalho da resposta " Content-Disposition " não for adicionado, o navegador poderá baixar ou exibir o conteúdo do arquivo e o processamento de diferentes navegadores varia.
2. Implementação do servidor de download de arquivos node.js
Em seguida, implementamos um servidor simples de download de arquivos com base na estrutura expressa, que inclui principalmente duas funções: arquivos do servidor de navegação e download de arquivos .
2.1 Adicionando uma rota
Depois de criar o aplicativo Express, adicione as duas rotas a seguir:
Router.get ('/files', function (req, res, seguinte) {// mostra o arquivo do servidor}); Router.get ('/file/: filename', function (req, res, seguinte) {// Implementar File Download});As duas rotas adicionadas acima são usadas para: Exibir arquivos do servidor e implementar downloads de arquivos .
2.2 Exibir arquivos do servidor
Para realizar a exibição dos arquivos do servidor, você deve ler o diretório de arquivos através do módulo " fs " e executar verificações de arquivo/diretório , etc. Você também precisa usar o módulo " Path " para processar o caminho do arquivo. Primeiro, esses dois módulos são introduzidos:
const fs = requer ('fs'); const caminho = requer ('caminho');O código de implementação para exibir o arquivo do servidor é o seguinte:
router.get ('/files', function (req, res, a seguir) {// mostra o arquivo do servidor // diretório de arquivos var filepath = path.join (__ dirname, './'); fs.readdir (filepath, function (err, resultados) {if (err) throw (resulta.Length> 0) {var arquivos = []; if (fs.statsync (Path.Join (filepath, arquivo). No código acima, depois de ler o diretório, a lista de arquivos para download é exibida através do arquivo de exibição " files.ejs ". O código é o seguinte:
<! Doctype html> <html> <head> <title> Download Seleção de arquivos </title> </ad Head> <body> <h1> Selecione o arquivo de download: </h1> <%se (files.length> 0) {%> %> </a> </li> <%})%> </ul> <%} else {%> <p> nenhum arquivo para download ... </p> <%}%> </body> </html>2.3 Implementar o download do arquivo
Ao baixar um arquivo, você pode primeiro ler o arquivo em um " Buffer " e enviar os dados do arquivo através dos métodos " res.send()” ou " res.end()” ou você pode enviar os dados do arquivo com base no fluxo (" Stream "). Ao usar o " Stream " para implementar o download de arquivos, você pode usar o método " fs.createReadStream()” para criar um fluxo legível, e a Response do objeto de resposta é um fluxo gravável. Dessa forma, você só precisa transferir o fluxo de arquivos para o fluxo de Response pelo método ”.pipe()” .
O código de implementação do download do arquivo é o seguinte:
router.get ('/file/: filename', function (req, res, a seguir) {// Implementar arquivo download var filename = req.params.fileName; var filepath = path.Join (__ Dirname, FILENFEL); var stats = fs.stsync (filePath); 'Application/Octet-Stream', 'Content-Disposition': 'Anexo;Resumir
O exposto acima é todo o conteúdo do uso do Node.js para obter downloads de arquivos HTTP. Espero que seja útil para todos aprenderem node.js.