Node.js 使用fs在nodeJs中复制图像

Node.js 使用fs在nodeJs中复制图像,node.js,npm,fs,Node.js,Npm,Fs,我正在尝试将png文件从一个文件夹复制到我的nodeJs项目中的另一个文件夹。我遇到一些问题。新图像文件出现问题,无法打开。 我使用这个代码 const fs = require('fs'); var inStr = fs.createReadStream(mainDir+"/"+req.body.ExRequestId+".png"); var outStr = fs.createWriteStream(mainDir+"/"+docReq._id + ".pn

我正在尝试将png文件从一个文件夹复制到我的nodeJs项目中的另一个文件夹。我遇到一些问题。新图像文件出现问题,无法打开。 我使用这个代码

const  fs = require('fs');

     var inStr = fs.createReadStream(mainDir+"/"+req.body.ExRequestId+".png");

        var outStr = fs.createWriteStream(mainDir+"/"+docReq._id + ".png");

        inStr.pipe(outStr);

使用流时,最好先等待流准备就绪,然后再使用它们并处理错误

// assuming you're using express and the app instance is bound to a variable named app

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

// ...

// helper function: returns a promise that gets resolved when the specified event is fired
const waitForEvent = (emitter, event) => new Promise((resolve, reject) => emitter.once(event, resolve));

app.post('/handle-post', async (req, res) => {
    // TODO: validate the input
    const { ExRequestId } = req.body;

    const srcFileName = `${path.join(mainDir, ExRequestId)}.png`;
    const destFileName = `${path.join(mainDir, docReq._id)}.png`;

    const srcStream = fs.createReadStream(srcFileName);    
    await waitForEvent(srcStream, "ready");
    const destStream = fs.createWriteStream(destFileName);    
    await waitForEvent(destStream, "ready");

    const handleError = err => res.status(500).json(err);
    srcStream.on("error", handleError);
    destStream.on("error", handleError);

    srcStream.pipe(destStream);
    await waitForEvent(srcStream, 'end');

    res.status(200).json({srcFileName, destFileName});
});
下面的代码段等待两个流上的
ready
事件,然后将ReadStream管道传输到WriteStream并处理错误

// assuming you're using express and the app instance is bound to a variable named app

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

// ...

// helper function: returns a promise that gets resolved when the specified event is fired
const waitForEvent = (emitter, event) => new Promise((resolve, reject) => emitter.once(event, resolve));

app.post('/handle-post', async (req, res) => {
    // TODO: validate the input
    const { ExRequestId } = req.body;

    const srcFileName = `${path.join(mainDir, ExRequestId)}.png`;
    const destFileName = `${path.join(mainDir, docReq._id)}.png`;

    const srcStream = fs.createReadStream(srcFileName);    
    await waitForEvent(srcStream, "ready");
    const destStream = fs.createWriteStream(destFileName);    
    await waitForEvent(destStream, "ready");

    const handleError = err => res.status(500).json(err);
    srcStream.on("error", handleError);
    destStream.on("error", handleError);

    srcStream.pipe(destStream);
    await waitForEvent(srcStream, 'end');

    res.status(200).json({srcFileName, destFileName});
});
我还列出了一个简单的工作示例。可以找到它。

尝试使用以下代码:

fs.readFile(sourcePath , function (err, data) {
 if (err) throw err;
 fs.writeFile(destinationPath , data , 'base64' , function (err) {
  if (err) throw err;
   console.log('It\'s saved!');
 });
});

尝试来自的第二种方法。如果同样的问题仍然存在,那么我猜您对原始图像本身有一些问题。@AjayDabas我尝试过,但不起作用。新映像为空您正在使用哪个版本的节点?节点从节点8.5.0添加了
copyFile
过程。试着用它来代替。查看如何使用。@ArminTaghavizad v11.0.9当我使用copyFile时,它已完成,但为空,如果您使用的是较低版本的node,则没有任何数据显示图像