1

在我的应用程序中,用户可以将图像上传到服务器,我将上传的文件放在上传文件夹中,如下所示

  • 上市

  • 上传

但是当我服务

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

有一个 404 错误。

我使用快递并使用

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

这是否意味着我必须将所有上传的文件放在公共文件夹中,如果有这么多硬盘驱动器无法容纳的图像怎么办,我不能将其余的放在另一个服务器中吗?

4

4 回答 4

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();
});

此代码不仅适用于上传的文件存储在原始服务器中,而且如果您在其他服务器上也有文件!

于 2013-02-11T09:55:33.813 回答
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'));
于 2013-02-11T02:37:18.083 回答
0

您可以将图像放在 ./public/upload

于 2012-10-26T06:17:53.937 回答
0

尝试使用这个:

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

上传前注意斜线。可能问题不在于您保存文件的位置,而在于您如何引用它们。如果带有img标签的页面不在您的根目录中,则相对 urlupload/image.jpg将不起作用。你需要使用/upload/image.jpg.

于 2012-10-29T20:51:56.013 回答