我的node.js應用程序通過var socket = net.createConnection(port, ip);
連接以從另一個服務器下載文件。一旦建立連接,服務器就會將該文件作爲數據發送。如何從Node.JS套接字流觸發瀏覽器下載?
我抓住它,然後做
socket.on('data', function(data) {
}).on('connect', function() {
}).on('end', function() {
console.log('DONE');
});
我最初的目標是,到下載使用上面,並在同一時間的方法文件給字節到客戶端的瀏覽器作爲下載的文件。例如:用戶點擊站點上的一個按鈕,觸發服務器端下載功能,用戶獲得文件保存提示。然後Node.JS從遠程服務器下載文件,同時在瀏覽器客戶端爲用戶提供每個新字節。這可能嗎?我想它需要發送octet-stream的頭文件來觸發瀏覽器Node.JS之間的文件傳輸。但是如何?
更新
現在我想下面的代碼與下面的答案的幫助:
app.get('/download', function (req, res) {
res.setHeader('Content-disposition', 'attachment; filename=' + "afile.txt");
res.setHeader('Content-Length', "12468")
var socket = net.createConnection(1024, "localhost");
console.log('Socket created.');
socket.on('data', function(data) {
socket.pipe(res)
}).on('connect', function() {
// // Manually write an HTTP request.
// socket.write("GET/HTTP/1.0\r\n\r\n");
}).on('end', function() {
console.log('DONE');
socket.end();
});
});
的數據被髮送到用戶的瀏覽器作爲下載,但最終的結果是一個破碎的文件。我查看了內部的內容,並發現該過程中的某些內容導致文件損壞。 我想現在我必須寫每字節的字節?而不是做socket.pipe?
你不能這樣做,但你可以使用套接字接收內存中的整個文件,然後讓用戶使用下載的文件一個數據URI。像這樣:http://stackoverflow.com/questions/3665115/create-a-file-in-memory-for-user-to-download-not-through-server。直接爲用戶流式傳輸文件下載但是不可能使用websockets – Kerstomaat
文件下載只能通過http。該接口是不存在的websocket發送文件通過它尚未標準化。請參閱另一個類似的問題http://stackoverflow.com/questions/9871357 /通過websocket接收文件並啓動下載對話框。 – user568109
你正在混合('data')和pipe。當你的第一塊數據丟失時你附上'.pipe' –