2012-10-26 67 views
1

在我的應用程序,用戶可以將圖像上傳到服務器,我把上傳的文件夾上傳這樣如何在node.js中提供靜態文件?

  • 公共

  • 上傳

但是當我服務於

<img src='upload/image.jpg'/> 

有一個404錯誤。

我用快遞和使用

app.use(express.static(__dirname + '/public')); 

它意味着我必須把公共文件夾所有上傳的,如果有什麼的硬盤驅動器無法容納這麼多的圖像,不能我把其餘的服務器放在另一臺服務器上?

回答

0

你可以把圖像./public/upload

0

嘗試使用這樣的:

<img src='/upload/image.jpg'/> 

注意斜線上傳前。這可能是問題不在於你保存文件的位置,而是你如何引用它們。如果帶有img標記的頁面不在您的根目錄中,則相對網址upload/image.jpg將不起作用。您需要使用/upload/image.jpg

0

如果

app.use(express.static(__dirname + '/public')); 

./public包含:

/img.png 
/img2.png 
/logo.png 

yourapp.com/img.png將img.png。

如果你想yourapp.com/img.png是404和yourapp.com/public/img.png是img.png,則需要更換

app.use(express.static(__dirname + '/public')); 

app.use("/public",express.static(__dirname + '/public')); 
2

不,你不必把所有上傳文件到公用文件夾。

Express允許配置多箇中間件,因此您可以添加一箇中間件來提供所需目錄中的靜態內容。

如果你想要在Url路徑中指定目錄,那麼你可以使用像這樣的目錄安裝功能!

app.use('/upload',express.static(__dirname + '/upload')); 

Ofcouse你可以使用其他服務器來存儲上傳的文件,你可以通過代理方式要求它檢索這些文件。

app.get('/upload/:fileName',function(req,res) { 

    var options = { 
     port: 80, 
     method : 'GET', 
     hostname : "localhost", 
     path : "/upload/" + req.params.fileName 
    }; 

    var req = http.request(options,function(response) {  
     response.pipe(res); 
    }); 

    req.on('error',function(err) { 
     res.statusCode = 404; 
     res.end("Error : file not found"); 
    }); 

    req.end(); 
}); 

此代碼將工作不僅在上傳的文件都存儲在原來的服務器,而且如果你有文件的一些其他服務器上太!