Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js writeFile没有这样的文件或目录_Node.js_Fs - Fatal编程技术网

Node.js writeFile没有这样的文件或目录

Node.js writeFile没有这样的文件或目录,node.js,fs,Node.js,Fs,我有一个文件(data.filea图像),我想保存这个图像。现在,在它之前可能存在一个同名的图像。我想覆盖,如果是这样,或创建它,如果它不存在,因为以前。我读到标志“w”应该这样做 代码: fs.writeFile('/avatar/myFile.png',data.file{ 旗帜:“w” },函数(err){ 如果(错误){ 返回console.log(err); } log(“文件已保存!”); }); 错误: 这可能是因为您正在尝试写入文件系统的根目录,而不是应用程序目录'/avata

我有一个文件(
data.file
a图像),我想保存这个图像。现在,在它之前可能存在一个同名的图像。我想覆盖,如果是这样,或创建它,如果它不存在,因为以前。我读到标志“w”应该这样做

代码:

fs.writeFile('/avatar/myFile.png',data.file{
旗帜:“w”
},函数(err){
如果(错误){
返回console.log(err);
}
log(“文件已保存!”);
});
错误:


这可能是因为您正在尝试写入文件系统的根目录,而不是应用程序目录
'/avatar/myFile.png'
->
\uu dirname+'/avatar/myFile.png'
应该可以做到这一点,同时检查文件夹是否存在。node.js不会为您创建父文件夹。

我解决了一个类似的问题,当时我试图创建一个名称包含不允许的字符的文件。还要注意,因为它会给出相同的错误信息。

我们中的许多人都会出现此错误,因为父路径不存在。例如,您有可用的
/tmp
目录,但没有文件夹“foo”,您正在写入
/tmp/foo/bar.txt

要解决此问题,可以使用-adapted from

选项A)使用回调
const mkdirp=require('mkdirp');
常数fs=要求('fs');
const getDirName=require('path')。dirname;
函数writeFile(路径、内容、cb){
mkdirp(getDirName(路径)、函数(err){
如果(错误)返回cb(错误);
fs.writeFile(路径、内容、cb);
});
}
选项B)使用异步/等待 或者,如果您有一个可以使用async/await的环境:

const mkdirp=require('mkdirp');
常数fs=要求('fs');
常量writeFile=async(路径、内容)=>{
等待mkdirp(路径);
fs.writeFileSync(路径、内容);
}

实际上,Linux/Unix系统中不允许的文件名的错误消息也会出现同样的错误,这非常令人困惑。请检查文件名是否包含任何保留字符。这些是我在创建文件之前异步创建一些嵌套文件夹时遇到的保留的,>,。在承诺开始写入文件之前,不会始终创建目标文件夹。我通过使用
mkdirSync
而不是“mkdir”来解决这个问题,以便同步创建文件夹

try {
    fs.mkdirSync(DestinationFolder, { recursive: true } );
} catch (e) {
    console.log('Cannot create folder ', e);
}
fs.writeFile(path.join(DestinationFolder, fileName), 'File Content Here', (err) => {
    if (err) throw err;
});
我出现此错误是因为我试图运行:

fs.writeFile(file)
fs.unlink(file)
...lots of code... probably not async issue...
fs.writeFile(file)

用同样的脚本。在第二次
writeFile
调用时发生异常。删除前两个调用解决了问题。

您可以使用“/”作为路径的前缀

在您的示例中,您将编写:

fs.writeFile('./avatar/myFile.png', data.file, (err) => {
  if (err) {
    return console.log(err);
  }
  console.log("The file was saved!");
});

在我的例子中,我使用async
fs.mkdir()
,然后,在不等待此任务完成的情况下,我尝试创建一个文件
fs.writeFile()

知道这是件小事,ta。我遇到的问题是父目录不存在。感谢tiphow在NodeJS的不同机器上编写文件。我尝试使用path而不是url(),但给出了相同的错误。是否可以在不同的服务器上上载文件?为此,您需要使用适当的软件包通过SFTP/FTP/任何方式上载。或者您需要链接其他服务器(这样就可以通过文件系统访问它,在windows上应该分配磁盘字母,在linux上安装)问题,为什么要等待
writeFileSync
?@eestein很好,没有必要。更新。但是在这种情况下没有区别,而fs.writeFileSync只是转换为已解析的promise,它在这种情况下不起任何作用<通过为
fs.mkDir
添加一个
recursive
选项,code>mkdirp变得多余。这也解决了我在Windows10上的问题—尝试在包含冒号的文件名中使用Date.toIsoString()编写文件。替换冒号修复了错误。这是一个解决方案,下面的答案是非常密切相关的
fs.writeFile('./avatar/myFile.png', data.file, (err) => {
  if (err) {
    return console.log(err);
  }
  console.log("The file was saved!");
});