【问题标题】:Node Js Server Images working only on localNode Js 服务器映像仅在本地工作
【发布时间】:2019-04-19 10:09:07
【问题描述】:

我正在将此代码与带有 Node js(和 Angular 6)的应用程序一起使用来读取图片:

Nodejs 服务器文件:

    ....
var express = require('express');
var path = require('path');
var app = express();
..
    const bodyParser = require('body-parser');
    const cookieParser = require('cookie-parser');
    const fileUpload = require('express-fileupload');
    const cors = require('cors');


    // view engine setup
     app.set('uploads', path.join(__dirname, 'uploads'));
    app.set('view engine', 'jade');

    app.use(cors());
    app.use(bodyParser.json());
    app.use(bodyParser.urlencoded({ extended: false }));
    app.use(cookieParser());
    app.use(fileUpload());
    app.use('/uploads', express.static(__dirname + '/uploads'));


    app.post('/upload', (req, res, next) => {
      console.log(req);
      let imageFile = req.files.file;

      imageFile.mv(`${__dirname}/uploads/${req.body.filename}.jpg`, function(err) {
        if (err) {
          return res.status(500).send(err);
        }

        res.json({file: `uploads/${req.body.filename}.jpg`});
      });

    })

    // catch 404 and forward to error handler
    app.use(function(req, res, next) {
      const err = new Error('Not Found');
      err.status = 404;
      next(err);
    });

    // error handler
    app.use(function(err, req, res, next) {
      // set locals, only providing error in development
      res.locals.message = err.message;
      res.locals.error = req.app.get('env') === 'development' ? err : {};

      // render the error page
      res.status(err.status || 500);
      res.render('error');
    });

    app.listen(8888, () => {
      console.log('8888');
    });

此代码正在本地读取图片。 例子: http://localhost:8888/uploads/02.jpg

但是在服务器上部署此代码时 我无法读取文件。例子: http://www.mywebsite.com/uploads/image.jpg(已有图片)

我需要做什么才能使此代码在在线网站上运行?

谢谢。

【问题讨论】:

  • 检查目录和文件的权限,可能nodejs进程不允许读取。另外,如果允许您从该目录读取,也许您需要检查您的服务器配置。
  • 您确定图片网址正确吗?您是否检查了 url 以查看 __dirname 是否为您提供了服务器中的正确路径
  • 是的,文件夹和图片的权限是读、写、执行。文件夹 uploads 与 server.js 文件在同一目录
  • 是不是图片不是仅以角度加载,而是在浏览器中在新标签页中访问直接url时加载,尝试在浏览器的新标签页中访问该url并检查图像是否加载
  • 还尝试在代码中进行以下更改:app.use('/uploads',express.static('uploads'));

标签: node.js angular mean-stack image-uploading imagesource


【解决方案1】:

接受的答案虽然看似解决了 OP 的问题,但会造成严重的安全威胁,应在生产中避免。 chomd -R 777 打开文件夹(以及所有子文件夹,包括项目文件,不仅是图像)供所有人查看和修改。相反,应该像@akkonrad 建议的那样对文件夹权限进行精细调整。

【讨论】:

  • 谢谢。我会考虑这个:)
【解决方案2】:

在远程服务器中,

sudo chomd -R 777 your_project_folder

试试看, 我的猜测是没有创建图像的权限问题或文件夹。

所以,检查错误日志后,如果没有创建图像文件夹,

首先,您应该创建它, 第二,输入这个脚本。它是赋予项目所有目录完全权限的脚本

【讨论】:

  • 谢谢。它现在有效! (使用主端口打开图片端口时出现问题,但当我单独测试时,它可以工作)
猜你喜欢
  • 1970-01-01
  • 2015-09-29
  • 2016-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-17
  • 2013-04-18
  • 2016-11-01
相关资源
最近更新 更多