2013-07-13 4 views
2

URL 경로를 기반으로 파일의 수정 된 버전을 제공하고 싶습니다.express를 사용하여 수정 된 파일 보내기

app.get('/file/:name/file.cfg', function (req, res) { 
    res.send(<the file file.cfg piped through some sed command involving req.params.name>) 
}); 

점의 존재, 응답 유형 text/html의 안, 정상과 같은 MIME 타입이어야한다 (여전히 잘못 될 수도 있지만 적어도 작동).

이 접근법의 보안 문제에 대해 알고 있습니다. 문제는 express와 node.js로 이것을 수행하는 방법에 관한 것이므로 입력을 위생적으로 다루기 위해 많은 코드를 넣을 것입니다. 더 나은 아직, 껍질을 친 적이 없어 (예 : sed 예를 들어, JS를 사용하기에 충분).

답변

1

일반 파일 형식은 무엇입니까?

설정 MIME 형식 사용 (docs) :

app.get('/file/:name/file.cfg', function (req, res) { 
    res.set('content-type', 'text/plain'); 
    res.send(<the file file.cfg piped through some sed command involving req.params.name>) 
}); 

당신이 기반 MIME 형식을 설정하는 node-mime


디스크에서 파일 res.sendfile를 사용을 보내려면 파일의 MIME 타입의 사용을 감지하려면 내선 번호

res.sendfile (경로, [options], [fn]]

지정된 경로에서 파일을 전송합니다.

파일 이름의 확장명을 기반으로 Content-Type 응답 헤더 필드의 기본값이 자동으로 설정됩니다. 콜백 fn (err)은 전송이 완료되거나 오류가 발생할 때 호출됩니다.

app.get('/file/:name/file.cfg', function (req, res) { 
    var path = './storage/' + req.params.name + '.cfg'; 
    if (!fs.existsSync(path)) res.status(404).send('Not found'); 
    else res.sendfile(path); 
}); 

또한 res.download 사용하여 파일을 다운로드 할 브라우저를 강제 할 수 있습니다. express는 훨씬 더 많은 것을 제공해야하며, 문서를 살펴보십시오.

내가 함께 일하게 일어나는 CFG 파일이
app.get('/file/:name/file.cfg', function (req, res) { 
    fs.readFile('../dir/file.cfg', function(err, data) { 
     if (err) { 
      res.send(404); 
     } else { 
      res.contentType('text/cfg'); // Or some other more appropriate value 
      transform(data); // use imagination please, replace with custom code 
      res.send(data) 
     } 
    }); 
}); 

(이 노드 REPL의 덤프입니다) :

> express.static.mime.lookup("../kickstart/ks.cfg") 
'application/octet-stream' 
> 

아주 일반적인

3

나는 대답이 라인을 따라 뭔가 생각 옵션, 나는 말할 것이다. 아나콘다는 아마 그것을 고맙게 생각할 것입니다.

관련 문제