Nodejs 如何设置上传文件的权限(或设置文件权限)

Nodejs 如何设置上传文件的权限(或设置文件权限)

如何给上传文件设置权限 这是我上传文件的代码 var target_path = ‘./public/’ + settings.bookimgfolder + req.files.filepath.name; var tmp_path = req.files.filepath.path; // 移动文件 fs.rename(tmp_path, target_path, function(err) { if (err) res.send({ success: false }); // 删除临时文件夹文件, fs.unlink(tmp_path, function(err1) { if (err1) res.send({ success: false }); else res.send({ success: true }); }); }); 意思是将一个图片保存到support文件夹的子文件夹下 经测试上传后的文件无法被删除 删除代码: fs.unlink(’./support’ + img.url + unescape(img.filename) , function(e_){ if(e_) { res.send({ error: e_ }); return; } else res.send({ success: “true” }); }); 如果从别处复制一张图片删除的话,就会成功 我看了一下上传的图片的权限,发现当前用户没有‘完全控制’ 我一我猜测上传的时候没有指定权限 求破如何设置权限


3 回复

在 Node.js 中,上传文件后设置文件权限可以通过使用 fs.chmodfs.chmodSync 方法来实现。这两个方法可以修改文件的访问权限。以下是一个示例代码,展示了如何在文件上传后设置其权限。

首先,让我们回顾一下你现有的代码,并添加权限设置的部分:

const fs = require('fs');
const path = require('path');

var target_path = './public/' + settings.bookimgfolder + req.files.filepath.name;
var tmp_path = req.files.filepath.path;

// 移动文件
fs.rename(tmp_path, target_path, function(err) {
    if (err) {
        res.send({
            success: false
        });
        return;
    }

    // 设置文件权限为可读、可写、可执行
    fs.chmod(target_path, '0755', function(err) {
        if (err) {
            res.send({
                success: false,
                error: err.message
            });
            return;
        }

        // 删除临时文件夹文件
        fs.unlink(tmp_path, function(err1) {
            if (err1) {
                res.send({
                    success: false,
                    error: err1.message
                });
                return;
            } else {
                res.send({
                    success: true
                });
            }
        });
    });
});

解释

  1. 引入模块:

    • fs 模块用于文件系统操作。
    • path 模块用于处理和转换文件路径。
  2. 移动文件:

    • 使用 fs.rename 将临时文件移动到目标路径。
  3. 设置文件权限:

    • 使用 fs.chmod 方法设置文件权限。'0755' 表示所有者具有读、写、执行权限,而组和其他用户只有读和执行权限。
    • 如果设置权限时发生错误,则返回错误信息并终止处理。
  4. 删除临时文件:

    • 使用 fs.unlink 删除临时文件。
    • 如果删除临时文件时发生错误,则返回错误信息并终止处理。
    • 如果一切顺利,则返回成功信息。

注意事项

  • 确保目标路径和文件名正确无误。
  • 权限字符串 '0755' 是八进制表示法,其中 0 表示八进制数。你可以根据需要调整权限。

通过这种方式,你可以确保上传的文件具有适当的权限,从而避免后续操作中出现权限问题。


rename之后还要unlink,mv之后还要rm,你觉得有可能成功吗

在Node.js中,你可以使用fs.chmod()fs.promises.chmod()方法来修改文件的权限。以下是如何修改上传文件权限的示例代码:

示例代码

const fs = require('fs');
const path = require('path');

var target_path = path.join('./public/', settings.bookimgfolder, req.files.filepath.name);
var tmp_path = req.files.filepath.path;

// 移动文件
fs.rename(tmp_path, target_path, function(err) {
    if (err) {
        res.send({ success: false });
        return;
    }

    // 设置文件权限为可读可写
    fs.chmod(target_path, 0o644, function(err) {
        if (err) {
            res.send({ success: false });
            return;
        }
        
        // 删除临时文件夹文件
        fs.unlink(tmp_path, function(err1) {
            if (err1) {
                res.send({ success: false });
            } else {
                res.send({ success: true });
            }
        });
    });
});

解释

  1. 移动文件:使用fs.rename()方法将临时文件移动到目标路径。
  2. 设置文件权限:使用fs.chmod()方法设置文件权限。0o644表示文件所有者具有读写权限,其他用户具有只读权限。
  3. 删除临时文件:使用fs.unlink()方法删除临时文件。

通过上述代码,你可以确保上传的文件具有正确的权限,从而避免在后续操作中遇到权限问题。

回到顶部