尝试使用mkdirp创建目录时,Node.js会引发错误

时间:2018-06-07 18:03:11

标签: javascript node.js

我正在尝试使用Node.js下载并稍后提供图像。我需要将每个图像保存在url指定的目录中。我下载图像的代码卡住了,因为没有目录可以保存它们。我正在尝试使用mkdirp创建一个,但不断收到错误[Error: EACCES: permission denied, mkdir '/20110'] errno: -13, code: 'EACCES', syscall: 'mkdir', path: '/20110'。这是我的完整代码:

controller.serveImages = function(req, res, connection) {
    var file = "/" + req.params.attachmentId + "/" + req.params.attachmentFileName;
    console.log("serve called", file);
    var fs = require('fs'),
        request = require('request');
    var mkdirp = require('mkdirp');
    mkdirp( "/" + req.params.attachmentId, function (err) {
        if (err) console.error(err)
        else console.log('Directory made!')
    });
    fs.readFile(file, function(error, data) {
        console.log("reading");
        if(error){
            if (error.code === 'ENOENT') { //File not downloaded
                var download = function(uri, filename, callback){
                    request.head(uri, function(err, res, body){
                        console.log('content-type:', res.headers['content-type']);
                        console.log('content-length:', res.headers['content-length']);

                        request(uri).pipe(fs.createWriteStream(filename)).on('close', callback);
                    });
                };

                download('https://www.google.com/images/srpr/logo3w.png', file, function(){
                    console.log('done');
                });
            }
            else{
                console.log(error)
            }
        }
        else{
            console.log("Found locally", data, file);
            res.sendFile(file);
        }
    });

};

代码改编自here。示例请求为/20110/TNCA+PB.png。有了这个,我想创建一个目录/20110并在那里保存TNCA+PB.png

1 个答案:

答案 0 :(得分:1)

似乎您正在尝试在文件系统根级别创建文件夹。您是否尝试在应用程序文件夹下创建文件夹?写入根级别绝不是一个好主意。

以下是让应用运行路径Determine project root from a running node.js application的一些建议,然后您可以将其附加到mkdirp功能。

此致