javascript - 尝试使用 mkdirp 创建目录时,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);
}
});
};
代码改编自这里。一个示例请求是/20110/TNCA+PB.png
. 有了这个,我想创建一个目录/20110
并保存TNCA+PB.png
在那里。
解决方案
似乎您正在尝试在文件系统根级别创建文件夹。您是否尝试在应用程序文件夹下创建文件夹?写入根级别绝不是一个好主意。
以下是获取应用程序运行路径的一些建议从正在运行的 node.js 应用程序确定项目根目录,然后您可以将其附加到您的mkdirp
函数中。
问候
推荐阅读
- google-apps-script - 如何使用应用程序 scipt 在第三方会议下拉列表中显示 logoUrl
- mysql - MySQL 从一个表中获取由另一个表的外键关联的内容
- javascript - 创建 React 组件的不同实例
- spring - 如何为我的 spring 容器生成补丁 ddl 脚本(delta/change 脚本)?
- ios - 从 SceneKit 导出 USDZ 会导致模型变暗
- css - 如何为反应选择设置自定义宽度
- django - celery .delay 为这个任务冻结,但为其他任务运行
- python - 我怎样才能实现这个递归公式?
- oracle - 小时必须在 0 到 23 之间 -oracle
- excel - 在不破坏隐藏公式的情况下删除选定行