[NODEJS] Express를 사용 NodeJS 서버에서 파일을 다운로드
NODEJSExpress를 사용 NodeJS 서버에서 파일을 다운로드
해결법
-
1.Express는 인생을 더 쉽게 만드는 이것에 대한 도우미가 있습니다.
Express는 인생을 더 쉽게 만드는 이것에 대한 도우미가 있습니다.
app.get('/download', function(req, res){ const file = `${__dirname}/upload-folder/dramaticpenguin.MOV`; res.download(file); // Set disposition and send it. });
다른 HTTP 헤더를 사용하여 더 많은 정보를 줄 필요가 있으므로 지금까지 브라우저에 관한 한, 파일의 이름은 바로 '다운로드'입니다.
res.setHeader('Content-disposition', 'attachment; filename=dramaticpenguin.MOV');
또한 이와 같은 마임 타입을 보낼 수 있습니다 :
res.setHeader('Content-type', 'video/quicktime');
좀 더 깊이있는 무언가를 원하는 경우에, 여기에 나중에 이동합니다.
var path = require('path'); var mime = require('mime'); var fs = require('fs'); 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); });
당신은 당신이 원하는대로에 헤더 값을 설정할 수 있습니다. 파일의 마임 타입이 무엇인지 확인하기 위해 노드 마임, -이 경우, 나는 마임 타입 라이브러리를 사용하고 있습니다.
여기에서 주목해야 할 또 다른 중요한 것은 내가 readStream를 사용하도록 코드를 변경 한 것입니다. 이 이름에 '동기화'어떤 방법을 사용하는 것은 노드가 비동기 될 운명 때문에 눈살을 찌푸리게 때문에 일을 할 수있는 더 나은 방법입니다.
-
2.그것은 "첨부 파일"로 경로에서 파일을 전송합니다. 예를 들어 :
그것은 "첨부 파일"로 경로에서 파일을 전송합니다. 예를 들어 :
var express = require('express'); var router = express.Router(); // ... router.get('/:id/download', function (req, res, next) { var filePath = "/my/file/path/..."; // Or format the path using the `id` rest param var fileName = "report.pdf"; // The default name the browser will use res.download(filePath, fileName); });
-
3.등 당신의 설정에 익스프레스의 정적 기능을 사용하여 PDF 파일, 워드 문서, 같은 정적 파일의 경우 :
등 당신의 설정에 익스프레스의 정적 기능을 사용하여 PDF 파일, 워드 문서, 같은 정적 파일의 경우 :
// Express config var app = express().configure(function () { this.use('/public', express.static('public')); // <-- This right here });
그리고 단지 예를 들어, 그 '공공'폴더 안에 모든 파일을 넣어 :
/public/docs/my_word_doc.docx
그리고 정기적으로 이전 링크는 사용자가 다운로드 할 수 있습니다 :
<a href="public/docs/my_word_doc.docx">My Word Doc</a>
-
4.4.x를 고속으로 응답을 첨부 () 방법이있다 :
4.x를 고속으로 응답을 첨부 () 방법이있다 :
res.attachment(); // Content-Disposition: attachment res.attachment('path/to/logo.png'); // Content-Disposition: attachment; filename="logo.png" // Content-Type: image/png
-
5.여기에 내가 그것을 할 방법은 다음과 같습니다
여기에 내가 그것을 할 방법은 다음과 같습니다
암호:
let fs = require('fs'); let path = require('path'); let myController = (req, res) => { let filename = 'myFile.ext'; let absPath = path.join(__dirname, '/my_files/', filename); let relPath = path.join('./my_files', filename); // path relative to server root fs.writeFile(relPath, 'File content', (err) => { if (err) { console.log(err); } res.download(absPath, (err) => { if (err) { console.log(err); } fs.unlink(relPath, (err) => { if (err) { console.log(err); } console.log('FILE [' + filename + '] REMOVED!'); }); }); }); };
-
6.
'use strict'; var express = require('express'); var fs = require('fs'); var compress = require('compression'); var bodyParser = require('body-parser'); var app = express(); app.set('port', 9999); app.use(bodyParser.json({ limit: '1mb' })); app.use(compress()); app.use(function (req, res, next) { req.setTimeout(3600000) res.header('Access-Control-Allow-Origin', '*'); res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept,' + Object.keys(req.headers).join()); if (req.method === 'OPTIONS') { res.write(':)'); res.end(); } else next(); }); function readApp(req,res) { var file = req.originalUrl == "/read-android" ? "Android.apk" : "Ios.ipa", filePath = "/home/sony/Documents/docs/"; fs.exists(filePath, function(exists){ if (exists) { res.writeHead(200, { "Content-Type": "application/octet-stream", "Content-Disposition" : "attachment; filename=" + file}); fs.createReadStream(filePath + file).pipe(res); } else { res.writeHead(400, {"Content-Type": "text/plain"}); res.end("ERROR File does NOT Exists.ipa"); } }); } app.get('/read-android', function(req, res) { var u = {"originalUrl":req.originalUrl}; readApp(u,res) }); app.get('/read-ios', function(req, res) { var u = {"originalUrl":req.originalUrl}; readApp(u,res) }); var server = app.listen(app.get('port'), function() { console.log('Express server listening on port ' + server.address().port); });
from https://stackoverflow.com/questions/7288814/download-a-file-from-nodejs-server-using-express by cc-by-sa and MIT license
'NODEJS' 카테고리의 다른 글
[NODEJS] 어떻게 Node.js를 프로그램에 명령 줄 인수를 전달합니까? (1) | 2020.09.16 |
---|---|
[NODEJS] 어떻게 '[오브젝트]') Node.js를의 CONSOLE.LOG (에 전체 개체를 얻을보다는 할 수 있습니까? (0) | 2020.09.16 |
[NODEJS] 어떻게 NPM의 ERR "NPM 오류를 해결하기 위해! 코드 ELIFECYCLE " (0) | 2020.09.16 |
[NODEJS] 간단한 웹 서버로 Node.js를 사용 (0) | 2020.09.16 |
[NODEJS] 어떤 범위에서 모듈 변수는 Node.js를에 저장됩니다? (0) | 2020.09.16 |