2016-12-27 114 views
1

我從我的nodejs服務器試圖管的http audio stream的NodeJS使用絕對路徑FS

var streamPath = 'http://127.0.0.1:1485/mystream.mp3'; 
var stat = fs.statSync(streamPath); 
response.writeHead(200, {'Content-Type': 'audio/mpeg','Content-Length': stat.size}); 
fs.createReadStream(streamPath).pipe(response); 

的問題是,fs不喜歡的絕對路徑,我得到以下錯誤:

Error: ENOENT: no such file or directory, stat 'C:\myserver\http:\127.0.0.1:1485\mystream.mp3'

我找不到使用absolute path的方法。這甚至有可能使用fs

+1

var path = require('path'); var strPath = path.join(__ dirname,'/publiuc/audio/mystream.mp3');也許這樣? –

+2

'fs'旨在用於_local_文件系統,而不是用於遠程資源。爲此使用'http'。 – Sirko

回答

0

'http://127.0.0.1:1485/mystream.mp3'不是絕對路徑,它是一個URL。

絕對路徑類似於文件系統上的/home/x/dir/file.txt

如果你想從一個URL獲得流,那麼你需要使用httprequest。或者,如果您想在不使用網絡的情況下在文件系統上獲取文件,則需要在文件系統上使用路徑,而不是URL。

fs.createReadStream只能打開文件系統中的本地文件。

有關詳細信息,請參閱:

拿到過一個網絡中的文件,請參閱:

+1

var request = require('request');請求( 'http://127.0.0.1:1485/stream/swyh.mp3').pipe(響應); – user3725041

+0

這個伎倆!謝謝! – user3725041

0

您正試圖通過fs訪問遠程資源 - 這是錯誤的。 fs旨在用於Local Filesystem。如果你想訪問任何遠程資源,你必須使用httphttps。但是,如果我看到的東西正確,你正試圖訪問你的localhost,這應該工作。

如果仔細觀察,您的應用程序試圖訪問以下文件:C:\myserver\http:\127.0.0.1:1485\mystream.mp3無法工作。您的路徑與您的本地路徑和遠程源(實際上是localhost)混合在一起。嘗試修復你的路徑,這應該可以解決你的問題。請記住,fs只適用於您的本地系統。

你也應該考慮一下fs.statSync這會阻止所有其他的東西,直到它完成。

文檔:

  1. FS:https://nodejs.org/api/fs.html

  2. HTTP:https://nodejs.org/api/http.html

  3. HTTPS:https://nodejs.org/api/https.html

此致 Megajin