node.js - 文件 createWriteStream 中的 NodeError [ERR_STREAM_WRITE_AFTER_END] : write after end,

标签 node.js fs cryptojs

对于每个请求,我都会尝试解密加密图像,并根据该图像提供响应。我启动了我的服务器,在第一个请求时,它解密文件,并发送正确的响应,而在下一个请求时,它尝试解密,但不将任何数据存储到新文件中,最后抛出错误“ERR_STREAM_WRITE_AFTER_END”,我的服务器崩溃了。

我的解密函数是

let decrypt = Crypto.createDecipher('aes-256-ctr', 'random_string');
async function decryptFile(encryptedFileDetails) {
    try {
        // write you code here..
        let decryptPromise = new Promise(async (decryptResolve) => {
            let r = FS.createReadStream(source);
            let w = FS.createWriteStream(destination);
            // start pipe
            r.pipe(decrypt).pipe(w);
            w.on('finish', function () {
                console.log('Decrypted file written to disk!');
                decryptResolve();
            });
        });
        await decryptPromise;
    } catch (error) {
        return Promise.reject(error);
    }
}


The error message I am receiving is

NodeError [ERR_STREAM_WRITE_AFTER_END]: write after end
    at writeAfterEnd (_stream_writable.js:248:12)
    at Decipher.Writable.write (_stream_writable.js:296:5)
    at ReadStream.ondata (_stream_readable.js:708:20)
    at ReadStream.emit (events.js:198:13)
    at addChunk (_stream_readable.js:287:12)
    at readableAddChunk (_stream_readable.js:268:11)
    at ReadStream.Readable.push (_stream_readable.js:223:10)
    at lazyFs.read (internal/fs/streams.js:181:12)
    at FSReqWrap.wrapper [as oncomplete] (fs.js:467:17) Emitted 'error' event at:
    at errorOrDestroy (internal/streams/destroy.js:107:12)
    at Decipher.onerror (_stream_readable.js:732:7)
    at Decipher.emit (events.js:198:13)
    at errorOrDestroy (internal/streams/destroy.js:107:12)
    at writeAfterEnd (_stream_writable.js:250:3)
    at Decipher.Writable.write (_stream_writable.js:296:5)
    [... lines matching original stack trace ...]
    at FSReqWrap.wrapper [as oncomplete] (fs.js:467:17)
</pre>



最佳答案

找到解决方案。

我试图通过全局声明来多次使用相同的密码流对象。但是一个密码流只能使用一次,下次我们必须创建另一个对象。

async function decryptFile(encryptedFileDetails) {
    try {
        // write you code here..
        let decryptPromise = new Promise(async (decryptResolve) => {
            let decrypt = Crypto.createDecipher('aes-256-ctr', 'random_string');
            let r = FS.createReadStream(source);
            let w = FS.createWriteStream(destination);
            // start pipe
            r.pipe(decrypt).pipe(w);
            w.on('finish', function () {
                console.log('Decrypted file written to disk!');
                decryptResolve();
            });
        });
        await decryptPromise;
    } catch (error) {
        return Promise.reject(error);
    }
}

关于node.js - 文件 createWriteStream 中的 NodeError [ERR_STREAM_WRITE_AFTER_END] : write after end,,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60751246/

相关文章:

node.js - XCode + react 原生 : "Bundle React Native code and images" build phase taking too long

json - 如何在 Node.js 中流式传输 JSON 文件并将其解释为 JSON?

javascript - CryptoJS 中的 AES-CTR 与 PyCrypto 兼容吗?

node.js - Nodejs 加密模块不适用于 typescript

blob - 如何使用CryptoJS获取BLOB的正确SHA1哈希?

javascript - helpers {{#if }} 不使用expressjs 和express3-handlebars 进行渲染

node.js - Socket.io + co : Is this how it's supposed to be used?

javascript - NodeJS 回调中的局部变量

javascript - 为什么我的fs错误在Node.js中返回空对象?

node.js - Node : Writing a lot of files: createWriteStream or writeFile?