首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在binary.js(BinaryStream.write)节点服务器上解析不可写入的流?

如何在binary.js(BinaryStream.write)节点服务器上解析不可写入的流?
EN

Stack Overflow用户
提问于 2017-09-19 13:43:24
回答 1查看 787关注 0票数 1

我正在文件上传节点服务器上工作,上传后的一个大文件会出现以下错误。

错误:流不能在(/node_modules/binaryjs/lib/stream.js:84:11)at /src/k/Cli/ BinaryStream.write /lib/media.js:120:36 at ChildProcess.exithandler (child_process.js:742:7)at ChildProcess.emit (events.js:110:17)at maybeClose (child_process.js:1015:16)at Process.ChildProcess._handle.onexit (child_process.js:1087:5)使用节点version v0.10.48https://github.com/rajkissu/binaryjs-upload-stream中选择引用代码

我无法找到解决这一问题的方法。

问题是,对于下面1%的情况,代码转到了console.log('Debug 4)情况,并且在执行stream.write({end: true});时停止了节点服务器,也就是说,我得到了坏的网关,因为抛出的错误没有得到处理。

在前端,我使用来自节点服务器的数据读取内容id并设置完成,但由于节点服务器停止并且无法从节点服务器获取内容id。

代码语言:javascript
复制
bs = new BinaryServer({ port: 9004 });

bs.on('connection', function (client) {
    client.on('stream', function (stream, meta) {
        upload(stream, meta);
    });
});

function upload(stream, meta) {
    var file = fs.createWriteStream(uploadPath + '/' + meta.name);
    stream.pipe(file);
    stream.on('end', function () {

       // console.log(__dirname);
        var cli_base=__dirname+'/../../';

        var cmd = '<upload systme cmd>';
        console.log('Uploading End and running command ' + cmd);         
        try {
            stream.write({uploaded: true});
        }catch (e) {
            console.log('Debug 3, Streem On End Event : '+e.message,meta);
            //  stream.write({end: true});
        }
        if(!meta.hasOwnProperty('executed')){
            meta.executed=true;
            child = exec(cmd, function (error, stdout, stderr) {
                try{
                    console.log(error, JSON.parse(stdout), stderr);
                    var command_output = JSON.parse(stdout);

                    if(command_output.hasOwnProperty('content_id')){
                        stream.write({end: true, content_id: command_output.content_id,files:command_output.file});
                        console.log(command_output.content_id);
                    }
                }catch (e) {                        
                   console.log('Debug 4, Streem On End Event : '+e.message,meta,child);
                   stream.write({end: true});
                }
            });
        }

    });
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-20 12:56:50

我为您的问题找到了解决方案,请在创建文件对象时使用选项,如下所示

代码语言:javascript
复制
var options = {flags: 'w', encoding: 'utf8',fd: null,mode: '0666'};
var file = fs.createWriteStream(uploadPath + '/' + meta.name,options);

节点参考options createWriteStream callback的编码选项

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46302121

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档