在我的应用程序,用户可以将图像上传到服务器,我把上传的文件夹上传这样如何在node.js中提供静态文件?
公共
上传
但是当我服务于
<img src='upload/image.jpg'/>
有一个404错误。
我用快递和使用
app.use(express.static(__dirname + '/public'));
它意味着我必须把公共文件夹所有上传的,如果有什么的硬盘驱动器无法容纳这么多的图像,不能我把其余的服务器放在另一台服务器上?
在我的应用程序,用户可以将图像上传到服务器,我把上传的文件夹上传这样如何在node.js中提供静态文件?
公共
上传
但是当我服务于
<img src='upload/image.jpg'/>
有一个404错误。
我用快递和使用
app.use(express.static(__dirname + '/public'));
它意味着我必须把公共文件夹所有上传的,如果有什么的硬盘驱动器无法容纳这么多的图像,不能我把其余的服务器放在另一台服务器上?
你可以把图像./public/upload
尝试使用这样的:
<img src='/upload/image.jpg'/>
注意斜线上传前。这可能是问题不在于你保存文件的位置,而是你如何引用它们。如果带有img
标记的页面不在您的根目录中,则相对网址upload/image.jpg
将不起作用。您需要使用/upload/image.jpg
。
如果
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'));
不,你不必把所有上传文件到公用文件夹。
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();
});
此代码将工作不仅在上传的文件都存储在原来的服务器,而且如果你有文件的一些其他服务器上太!