2016-09-04 3 views
1

익스프레스 js로 파일을 다운로드하려고하는데 문제가 있습니다.
아래 는 기능입니다 :노드 익스프레스 js 파일을 다운로드

var download = function(uri, filename, callback) { 
    request 
    .get(uri) 
    .on('response', function (response) { 
    var ext = response.headers['content-type'].split('/'); 
    filename += '.' + ext[1]; 
    }) 
    .pipe(fs.createWriteStream(filename)); 
}; 

문제는 그 파일의 확장자를 모르는, 그래서 응답 헤더에 그것을 얻을 필요하지만 ext[1] 값이 내 이름을 증가하지 않습니다 파일 확장자. 함수를 사용하지 않고 변수를 참조로 설정할 수도 없습니다.

+0

당신은 여기에서 도움을받을 수 있습니다 http://stackoverflow.com/questions/7288814/download-a-file-from-nodejs-server-using-express – abdulbarik

+0

@abdulbarik - 그는 외부 URL을하지 다운로드 싶어 다운로드 요청에 응답합니다. – yeya

+0

'URI'는 동적으로 나타 납니까? 보여줄 수 있습니까? – abdulbarik

답변

0
  • 나는 '파일 이름'이 데이터를 얻기 전에 파이프가 해고된다고 생각합니다. 당신은 '/'로 분할 안

대신을 시도해보십시오

var mime = require('mime-types'); // After npm install mime-types 

request 
    .get(uri) 
    .on('response', function (response) { 

     var responseType = (response.headers['content-type'] || '').split(';')[0].trim(); 
     var ext = mime.extension(responseType); 

     filename += '.' + ext; 

     var fileStream = fs.createWriteStream(filename) 
        .on('finish', function() { 
         //Download complete 
        }) 

     this.pipe(fileStream); 
    }) 

P.S.을 Express가 아닌 '요청'모듈을 사용하여 다운로드 중입니다.

+0

헤이 예야! 귀하의 회신에 감사드립니다! 글쎄, 내가 응답 함수 밖에서 파일 이름을 가져올 필요가 어떻게이 파일 이름을 반환하거나 참조로 변수를 설정할 수 있습니까? 다시 한 번 감사드립니다! –

+0

함수 밖에서 파일 이름을 정의 할 수 있지만 변경된시기는 알 수 없습니다. NodeJS는 알고있는대로 비동기식입니다. – yeya