最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - expressjs: Sending a file from parent directory - Stack Overflow

programmeradmin3浏览0评论

I would like to use expressjs's sendfile to send a file from a parent directory of the script file. What I tried to do is this:

app.get('/', function(req, res){
    res.sendfile('../../index.html');
});

I get a forbidden error because apparently, sendfile does not trust path traversal. So far I've been unable to figure out how to change the directory for files sent via sendfile. Any hints?

Edit: I was kind of tired when posting this, in fact it is kind of easy. I'll leave it here in case anybody else stumbles upon this. There's an option parameter for sendfile that allows you to do just that, like so:

app.get( '/', function( req, res ){
    res.sendfile('index.html', { root: "../../"});
});

I would like to use expressjs's sendfile to send a file from a parent directory of the script file. What I tried to do is this:

app.get('/', function(req, res){
    res.sendfile('../../index.html');
});

I get a forbidden error because apparently, sendfile does not trust path traversal. So far I've been unable to figure out how to change the directory for files sent via sendfile. Any hints?

Edit: I was kind of tired when posting this, in fact it is kind of easy. I'll leave it here in case anybody else stumbles upon this. There's an option parameter for sendfile that allows you to do just that, like so:

app.get( '/', function( req, res ){
    res.sendfile('index.html', { root: "../../"});
});
Share Improve this question edited Nov 12, 2012 at 14:09 Silvester asked Nov 12, 2012 at 1:25 SilvesterSilvester 5161 gold badge3 silver badges14 bronze badges 1
  • 1 For static resources on server, you can also use express.static. Ideally sendFile function is for serving files (client downloads file) not for static content. – smitrp Commented Mar 13, 2013 at 10:10
Add a comment  | 

3 Answers 3

Reset to default 10

You have to mention root as the second parameter of sendfile().

For example:

app.get('/:dir/:file', function(req, res) {
  var dir = req.params.dir,
      file = req.params.file;

  res.sendfile(dir + '/' + file, {'root': '../'});
});

You can find more details here: https://github.com/visionmedia/express/issues/1465

You need to use express.static.

Say you have the following directory set up:

/app
   /buried
       /deep
           server.js
   /public
       index.html

Then you should have the following Express configuration:

var express = require('express');
var server = express.createServer();
server.configure(function(){
    server.use(express.static(__dirname + '../../public'));
});
server.listen(3000);

res.sendfile is meant for "finer-grain" transferring of files to the client. See API docs for example.

parent folder: -app -routes.js -index.html In the above case, Add the following code to routes.js to send a file from parent directory.

var path=require("path") //assuming express is installed 

app.get('/', function(req, res){
res.sendFile(path.join(__dirname + '/../index.html'));
});
发布评论

评论列表(0)

  1. 暂无评论