在我的应用程序用户可以将图像上传到服务器,我将上传的文件放在上传文件夹中,如下所示
公共
上传
但是当我服务
时<img src='upload/image.jpg'/>
有404错误。
我使用快递并使用
app.use(express.static(__dirname + '/public'));
这是否意味着我必须将所有上传的内容放在公共文件夹中,如果硬盘无法容纳这么多图像怎么办,我不能将其余部分放在另一台服务器上吗?
答案 0 :(得分:2)
不,您不必将所有上传的文件都放到公共文件夹中。
Express允许配置多个中间件,因此您可以添加一个中间件来从所需目录中提供静态内容。
如果您希望在Url路径中指定目录,那么您可以使用像这样的目录安装功能!!
app.use('/upload',express.static(__dirname + '/upload'));
您可以使用其他服务器来存储上传的文件,您可以通过代理请求来检索这些文件。
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();
});
此代码不仅适用于上传文件存储在原始服务器中的情况,也适用于其他服务器上也有文件!!
答案 1 :(得分:0)
您可以将图像放在./public/upload
中答案 2 :(得分:0)
尝试使用:
<img src='/upload/image.jpg'/>
请注意上传前的斜杠。可能问题不在于您保存文件的位置,而在于您如何引用它们。如果带有img
标记的网页不在您的根目录中,则相对网址upload/image.jpg
将无效。您需要使用/upload/image.jpg
。
答案 3 :(得分: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'));