2014-05-07 17 views
0

我在我的本地系統的驅動器中有一個文件。我需要將文件下載到E:Drive。如何使用node.js和http請求做到這一點?我是node.js的初學者。請給我寶貴的建議。如何使用node.js和http下載文件?

注意:該文件可以是任何類型。

+2

爲什麼你需要http?您只需將文件從一個驅動器移動到另一個驅動器即可。 – anvarik

+0

但要求是使用http請求。 – thevan

+0

它是一個文本文件還是一個二進制文件? – DrakaSAN

回答

3

下面是一個例子:

// upload.js 
var fs = require('fs') 

var newPath = "E:\\newPath"; 
var oldPath = "D:\\oldPath"; 

exports.uploadFile = function (req, res) { 
    fs.readFile(oldPath, function(err, data) { 
     fs.writeFile(newPath, data, function(err) { 
      fs.unlink(oldPath, function(){ 
       if(err) throw err; 
       res.send("File uploaded to: " + newPath); 
      }); 
     }); 
    }); 
}; 

// app.js 
var express = require('express'), // fetch express js library 
upload = require('./upload'); // fetch upload.js you have just written 

var app = express(); 
app.get('/upload', upload.uploadFile); 

app.listen(3000); 

基本上有兩個部分,一個做複製從一個驅動器到另一個,並且另一種是用於觸發。一旦你運行你app.js,並作出一個GET請求localhost:3000/upload它會將文件從newPath複製到oldPath。欲瞭解更多信息,請登錄expressjsfs

+0

運行時,我得到的錯誤爲「錯誤:EPERM,打開'E:\'」 – thevan

+0

嗨..其工作正常。但是當下載文件時,舊路徑文件被刪除。我希望舊路徑中的文件也不會被刪除。可能嗎? – thevan

+1

我評論fs.unlink線。現在它提供了理想的結果。非常感謝你。 – thevan

2

假設它是一個文本文件,您將不得不編寫兩個node.js服務器。

第一個會回答(所有/特定,你的選擇)http獲取文件的內容,另一個會獲取並下載文件。

server.js:將只能用於文本文件

var http = require('http'), 
    fs = require('fs'), 
    server = http.createServer(function (req, res){ 
     res.writeHead(200, {'content-type': 'text/text'}); 
     fs.readFile('E:/path/to/file.txt', function (data) { 
      res.write('' + data); 
      res.end(); 
     }); 
}).listen(8080); 

client.js

var http = require('http'), 
    fs = require('fs'), 
    file = fs.createWriteStream('D:/path/to/new.txt', {flags: 'w'}); 
http.get('http://localhost:8080', function (res) { 
    res.pipe(file, {end: 'false'}); 
    res.on('end', function() { 
     file.end(); 
    }); 
}); 

編輯:

唯一的優勢與anvarik的解決方案是,我不T選用快遞...

+0

是的,但你的解決方案只適用於文本:)我的所有種類的數據 – anvarik

+0

@anvarik:是的,這就是爲什麼我說這是唯一的優勢; ) – DrakaSAN

+0

嗨,如何下載所有類型的文件? – thevan