【问题标题】:Copy a source file to another destination in Nodejs将源文件复制到 Nodejs 中的另一个目标
【发布时间】:2016-11-30 10:26:20
【问题描述】:

我正在尝试使用 fs-extra 模块将图像从一个文件夹复制到另一个文件夹。

var fse = require('fs-extra');

function copyimage() {
  fse.copy('mainisp.jpg', './test', function (err) {     
    if (err) 
      return console.error(err)
  });
}

这是我的目录

这是我一直得到的错误:

错误{errno:-4058,代码:“ENOENT”,系统调用:“lstat”,路径: "E:\mainisp.jpg", message: "ENOENT: 没有这样的文件或目录,lstat 'E:\mainisp.jpg'"}

通过将目的地更改为./test/ 我得到了这个错误

错误{errno:-4058,代码:“ENOENT”,系统调用:“lstat”,路径: "E:\Development\Node 应用程序\Node 软件\Digital_library\mainisp.jpg", 消息:“ENOENT:没有这样的文件或目录,lstat 'E:\Devel... 应用程序\节点软件\Digital_library\mainisp.jpg'"}

注意:我没有在浏览器中测试这个。这是一个 Nwjs 应用程序,附加的错误图片来自 Nwjs 控制台。

【问题讨论】:

    标签: javascript node.js nwjs fs-extra


    【解决方案1】:

    试试:

    var fs = require('fs-extra');
    
    fs.copySync(path.resolve(__dirname,'./mainisp.jpg'), './test/mainisp.jpg');
    

    正如您在错误消息中看到的,您正在尝试从 E:\mainisp.jpg 而不是当前目录读取文件。

    您还需要指定文件的目标路径,而不仅仅是目标文件夹。

    【讨论】:

    • 感谢您的快速回复!但是 src 文件位于 javascript 文件的同一目录中,因此路径可能只是我们在 Html 或 css 中使用它的名称。我没有得到这个东西“文件的目标路径”!
    • 你能用上面的代码显示我应该使用的确切路径吗?附上目录图!请
    • @RaoHammasHussain 目标路径必须是 ./test/mainisp.jpg 而不是 ./test。您需要指定文件,而不仅仅是目录。
    • 还有这个 __dirname ???什么应该来这里?在 nodejs 测试中出现此错误 ReferenceError: path is not defined !
    【解决方案2】:

    您可以使用原生 fs 模块轻松地使用流来做到这一点。

    const fs = require('fs');
    const path = require('path');
    
    let filename = 'mainisp.jpg';
    let src = path.join(__dirname, filename);
    let destDir = path.join(__dirname, 'test');
    
    fs.access(destDir, (err) => {
      if(err)
        fs.mkdirSync(destDir);
    
      copyFile(src, path.join(destDir, filename));
    });
    
    
    function copyFile(src, dest) {
    
      let readStream = fs.createReadStream(src);
    
      readStream.once('error', (err) => {
        console.log(err);
      });
    
      readStream.once('end', () => {
        console.log('done copying');
      });
    
      readStream.pipe(fs.createWriteStream(dest));
    }
    

    【讨论】:

    • 它不起作用! ' .. 我将您的代码复制并粘贴到我的函数中,但仍然出现我上面提到的 100% 秒错误。
    • 此代码确实有效,您只是遇到错误,因为目标目录不存在。至少这就是您提供的错误所说的。您想要的目录路径不会与文件一起创建。在复制文件之前,包含文件夹仍然需要存在。
    • @RaoHammasHussain 在开始之前添加了目录检查。
    • 请看我附有问题的目录图像。目标文件夹 /test 已经存在!
    • 我用过这种方式,它可以工作,但它破坏了时间戳数据,有没有办法保持文件的原始创建时间和修改时间?
    【解决方案3】:

    试试:

    const fs = require('fs');
    fs.copyFileSync(src, dest);
    

    【讨论】:

      猜你喜欢
      • 2017-11-16
      • 2012-01-10
      • 1970-01-01
      • 2013-05-21
      • 2012-02-15
      • 2021-09-02
      • 2017-11-18
      • 2012-12-01
      相关资源
      最近更新 更多