머리말
HTTP로 파일을 다운로드 할 때 서버에서 관련 응답 헤더 만 설정하고 바이너리를 사용하여 파일 데이터를 전송하면 클라이언트 (브라우저)가 응답 헤더를 기반으로 파일 데이터를 수신합니다. Node.js에서 응답 헤더를 설정 한 후 파일 스트림을 읽은 다음 “.pipe()” 메소드를 사용하여 스트림을 응답 객체 Response 으로 전송하면 간단한 파일 다운로드 서버를 구현할 수 있습니다.
1. 파일 다운로드 소개
HTTP는 요청 헤더 및 응답 헤더를 기반으로 상태 상호 작용을 구현합니다. 서버의 올바른 응답 상태를 얻은 후 클라이언트는 먼저 응답 헤더를 구문 분석하고 응답 헤더를 기반으로 수신 및 표시 데이터 (응답 본문)를 표시합니다. 파일 다운로드의 경우 구현 프로세스는 다음과 같습니다.
1. 클라이언트는 파일 리소스 요청을 시작합니다
2. 서버는 해당 파일을 찾고 파일의 "MIME"유형 및 파일 설명을 각각 나타 내기 위해 " Content-Type "및 " Content-Disposition "과 같은 응답 헤더를 설정합니다.
3. 클라이언트는 서버에서 반환 한 응답 헤더를 기반으로 파일 데이터를 구문 분석하고 수신합니다.
설정 해야하는 응답 헤더
파일 다운로드 응답 헤더를 설정할 때 일반적으로 사용되는 HTTP 응답 헤더 외에도 다음 두 응답 헤더를 설정하는 것이 더 중요합니다.
컨텐츠 유형 : 응용 프로그램/Octet-StreamContent-Disposition : 첨부; filename = myfilename.ext
위의 설정에서 " Content-Type: application/octet-stream "은 브라우저에 이것이 바이너리 파일임을 알려주고 " Content-Disposition "은 브라우저에 다운로드 해야하는 첨부 파일을 알려주고 브라우저에 기본 파일 이름을 알려줍니다. " Content-Disposition "응답 헤더가 추가되지 않으면 브라우저가 파일 컨텐츠를 다운로드하거나 표시 할 수 있으며 다른 브라우저의 처리는 다양합니다.
2. node.js 파일 다운로드 서버 구현
다음으로 Express Framework를 기반으로 간단한 파일 다운로드 서버를 구현하는데, 여기에는 주로 서버 파일 탐색 및 파일 다운로드의 두 가지 기능이 포함됩니다.
2.1 경로 추가
Express 응용 프로그램을 작성한 후 다음 두 경로를 추가하십시오.
router.get ( '/files', function (req, res, next) {// show server file}); router.get ( '/file/: filename', function (req, res, next) {// 파일 다운로드});위에 추가 된 두 경로는 다음과 같습니다. 서버 파일 표시 및 파일 다운로드 구현 .
2.2 디스플레이 서버 파일
서버 파일의 표시를 실현하려면 " fs "모듈을 통해 파일 디렉토리를 읽고 파일/디렉토리 확인 등을 수행해야합니다. 또한 파일 경로를 처리하려면 " 경로 "모듈을 사용해야합니다. 먼저이 두 모듈이 소개됩니다.
const fs = require ( 'fs'); const path = require ( 'path');
서버 파일 표시를위한 구현 코드는 다음과 같습니다.
router.get ( '/files', function (req, res, next) {// 서버 파일 표시 // 파일 디렉토리 var filepath = path.join (__ dirname, './'); fs.readdir (filepath, function (err, results) {if (err) rost err; if (results.length> 0) {var files = []; results (filtureach (file). if (fs.Statsync (filepath, file)). isfile ()) {files.push (file)}; 위 코드에서 디렉토리를 읽은 후 다운로드 가능한 파일 목록은보기 파일 " files.ejs "를 통해 표시됩니다. 코드는 다음과 같습니다.
<! docType html> <html> <head> <head> <title> 파일 선택 다운로드 </title> </head> <body> <h1> 다운로드 파일을 선택하십시오 : </h1> <%if (files.length> 0) {%> <ul> <%files.foreach (function (file) {%> <li> <a href = <a file/<a file/<%%> " %> </a> </li> <%})%> </ul> <%} else {%> <p> 다운로드 가능한 파일 없음 ... </p> <%}%> </body> </html>2.3 파일 다운로드 구현
파일을 다운로드 할 때는 먼저 파일을 " Buffer "로 읽은 다음 " res.send()” 또는 " res.end()” 메소드를 통해 파일 데이터를 보내거나 스트림 ( " Stream ")을 기반으로 파일 데이터를 보낼 수 있습니다. " Stream "을 사용하여 파일 다운로드를 구현할 때 " fs.createReadStream()” 메소드를 사용하여 읽을 수있는 스트림을 생성 할 수 있으며 응답 객체 Response 쓰기 쉬운 스트림입니다. 이러한 방식으로 ”.pipe()” 메소드를 통해 파일 스트림을 Response 응답 스트림으로 전송하면됩니다.
파일 다운로드 구현 코드는 다음과 같습니다.
router.get ( '/file/: filename', function (req, res, next) {// 파일 구현 var filename = req.params.filename; var filepath = path.join (__ dirname, filename); var stats = fs.statsync (filepath); if (stats.s {res.sets (r res.set) { ''content-type ': 'Octet-stream', '컨텐츠-제작': '컨텐츠-길이';요약
위는 Node.js를 사용하여 HTTP 파일 다운로드를 달성하는 모든 내용입니다. Node.js를 배우는 것이 모두 도움이되기를 바랍니다.