使用nodejs和express的权限

oo7oh9g9  于 2023-06-29  发布在  Node.js
关注(0)|答案(1)|浏览(124)

我有一个带有express的node.js服务器和带有一些JavaScript、CSS等的HTML页面。几个星期前,我有一个要求添加图像到页面,我收到的图像的名称,我必须显示它,我也知道它存储的目录。问题是,当我在测试时,我添加了一个图像到该文件夹,并在进入页面时显示它。现在我添加了一些更多的图像,我试图显示它们,但它不起作用。错误是这样的:
错误:EACCES:permission denied,open '/fotos/Abstract-sony.jpg'
我之前添加的图像仍然有效,但新的图像不行。我给了他们同样的权限,所以不应该这样。我使用的目录结构是这样的:

/Images
/Server
  --app.js
  --package.json
  /node_modules
  /client
      --index.html
      /js
      /css
      /imgs

是的,我有两个文件夹的图像,一个在客户端没有问题,另一个是问题,不,我不能简单地移动图像到/imgs。服务器代码如下:

const http = require("http");
const sio = require("socket.io");
const express = require("express");

const app = express();
const SioServer = http.createServer(app)

const io = sio(SioServer);
const sioPort = 3000;

app.use(express.static(__dirname + '/client'))
app.use(express.static("/images/"))

io.on("connection", (socket)=>{
  console.log("IO user connected")
    socket.on('client_data', (id) => {
      var userId = id;
      socket.join(userId)
    });
    socket.on("lastImage",(msg)=>{
        console.log(msg)
        io.to("Web").emit("lastImage", msg)
    })
  });

app.get("/", (req,res)=>{
    res.sendFile(__dirname + '/client/index.html')
})

//Lanzamos el servidor en el puerto 3000
SioServer.listen(sioPort,()=> {
    console.log(`Listening on ${sioPort}`)
})

在Web端,我有一个HTML和一个JavaScript,类似于这样:

function init() {
    image = document.getElementById("image");
    image.setAttribute("src", "/test.jpg");
}
socket.on("lastImage", (msg)=>{
    image = document.getElementById("image");
    image.setAttribute("src", "/"+msg);
})

这样,test.jpg就会显示在页面上,但是每当有新图像的消息到达时,它就会抛出之前的错误。如果我尝试从头开始显示新图像,它也会抛出错误。
此外,图像的权限(是的,它们是壁纸,这是我手头的东西):

drwxr-xr-x 1 root vboxsf       750 jun 23 11:29 .
drwxr-xr-x 1 root root         196 jun  7 17:05 ..
-rwx------ 1 root vboxsf    191120 jun 23 11:29 1920x1080_1644315267727.jpeg
-rwx------ 1 root vboxsf    136744 jun 23 11:29 1920x1080_1646185285507.jpeg
-rwx------ 1 root vboxsf     50212 jun 23 11:29 1920x1080_1646185504142.jpeg
-rwx------ 1 root vboxsf     67215 jun 23 11:29 1920x1080.jpg
-rwx------ 1 root vboxsf    662321 jun 23 11:29 1920x1080.png
-rwx------ 1 root vboxsf   1489068 jun 23 11:29 2560x1600.png
-rwx------ 1 root vboxsf   2514658 jun 23 11:29 5120x28800.png
-rwx------ 1 root vboxsf   4160783 jun 23 11:29 5120x2880.jpg
-rwx------ 1 root vboxsf   4370767 jun 23 11:29 5120x2880.png
-rwx------ 1 root vboxsf   1204050 jun 23 11:29 8000x4500.png
-rwx------ 1 root vboxsf    866785 jun 23 11:29 848791.jpg
-rwx------ 1 root vboxsf    166850 jun 23 11:29 Abstract-sony.jpg
-rwx------ 1 root vboxsf    345646 jun 23 11:29 Blue_and_Yellow 01.jpg
-rwx------ 1 root vboxsf   4247411 jun 23 11:29 Carl.png
-rwx------ 1 root vboxsf    626061 jun 23 11:29 future-28.jpg
-rwx------ 1 root vboxsf   2858273 jun 23 11:29 Helado-5120x2880.png
-rwx------ 1 root vboxsf     31124 jun 23 11:29 nordic-wallpaper.jpg
-rwx------ 1 root vboxsf    242094 jun 23 11:29 Onda-1920x1080.jpg
-rwx------ 1 root vboxsf    437369 mar  6 21:04 prueba.jpg
-rwx------ 1 root vboxsf     90433 jun 23 11:29 Smite-Loki-Wallpaper-09053.jpg
-rwx------ 1 root vboxsf    258213 jun 23 11:29 t5CrPk.jpg
-rwx------ 1 root vboxsf 470336768 jun 15 10:53 test.mp4
-rwx------ 1 root vboxsf    211231 jun 23 11:29 wp3330706.jpg
hi3rlvi2

hi3rlvi21#

解决方案是创建一个新用户,并将服务器需要使用的所有文件和目录的所有权授予该用户。谢谢jabaa。

相关问题