2016-06-22 6 views
0

Das Anfrageknotenmodul: https://github.com/request/request hat ein Beispiel, wo es nur die Antwort erhält und es dann in einen schreibbaren Dateistrom pipettiert. Was passiert, wenn ich einen variablen Dateinamen habe? Zum Beispiel, wenn der Link ein PNG oder ein JPG sein könnte? Wie pipere ich, nachdem ich die Antwort bekommen habe?Wie erstelle ich einen variablen Dateinamen mit der Anfrage nodejs Modul?

request.get('http://google.com/doodle.png').pipe(fs.createWriteStream('doodle.png')) 

Zum Beispiel

request.get(fileURL) 
    .on('response', res => { 
     let resType = res.headers['content-type']; 
     //get the file name based on the content-type 
    }) 
    .pipe(fs.createWriteStream(fileName); //should use the fileName created in the on('response') callback 

Antwort

3

Sie waren ganz in der Nähe. Sie müssen nur innerhalb dieses Rückrufs Rohr:

let req = request.get(fileURL) 
    .on('response', res => { 
     let resType = res.headers['content-type']; 
     let fileName = figureOutExtension(resType); //get the file name based on the content-type 
     req.pipe(fs.createWriteStream(fileName)); 
    }) 
0

Sie die Datei in der Callback erstellen sollten, da der Rückruf am Ende dieses Programms ausgeführt wird und der Dateiname ist Basis auf ResTyp.

0

Im Fall haben Sie einen Upload und Sie haben nicht res.headers [ 'content-type']

<html> 
<body> 
<input onclick="this.value=null"type="file" name="afile" id="afile"/> 
<script> 
    document.getElementById('afile').addEventListener('change', function(e) { 
     var file = this.files[0]; 
     var fd = new FormData(); 
     fd.append("afile", file); 
     var xhr = new XMLHttpRequest(); 
     xhr.open('POST', 'http://localhost:1337', true); 
     xhr.send(fd); 
    }, false); 
</script> 
</html> 


// server 
'use strict'; 
const http = require('http'); 
const fs = require('fs') 
var server = http.createServer((req, res) => { 
    res.setHeader('Access-Control-Allow-Origin', '*'); 
    res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE'); 
    res.setHeader('Access-Control-Allow-Credentials', true); 
    req.setEncoding('utf8'); 
    let finalData; 
    req.on('data', (data) => { 
    finalData += data 
    }) 
    req.on('end',() => { 
    console.log(finalData.split('\n')[2]); 
    res.end(); 
    }); 
}); 
server.listen(1337); 
Verwandte Themen