用fs复制nodeJs中的图像

问题描述 投票:2回答:2

我正在尝试将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);
node.js npm fs
2个回答
1
投票

尝试使用此代码:

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!');
 });
});

1
投票

使用流时,最好在使用流之前先等待流准备就绪并处理错误。

以下代码段在将ReadStream传递到WriteStream并处理错误之前,等待两个流上的ready事件。

// 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});
});

我还整理了一个最小的工作示例。可以找到here

© www.soinside.com 2019 - 2024. All rights reserved.