Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 公共汽车司机没有被解雇_Javascript_Node.js_Typescript_Stream_Busboy - Fatal编程技术网

Javascript 公共汽车司机没有被解雇

Javascript 公共汽车司机没有被解雇,javascript,node.js,typescript,stream,busboy,Javascript,Node.js,Typescript,Stream,Busboy,我想将原始文件流传递到另一层代码,该层代码将处理稍后的磁盘上的拖放(上传到云存储)行为。由于文件大小可能很大,我实际上无法完全缓冲传入的文件。我假设PassThrough流应该传递所需的数据。已调用file.resume,但从未调用finish事件 如何收集所有必需的表单字段以及单个文件流,并进行适当的服务调用,而不在内存存储或本地磁盘上显示整个文件,因为这两个文件都有一些 private collectMultipartRequest (req: Request, fileFieldName:

我想将原始文件流传递到另一层代码,该层代码将处理稍后的磁盘上的拖放(上传到云存储)行为。由于文件大小可能很大,我实际上无法完全缓冲传入的文件。我假设
PassThrough
流应该传递所需的数据。已调用
file.resume
,但从未调用
finish
事件

如何收集所有必需的表单字段以及单个文件流,并进行适当的服务调用,而不在内存存储或本地磁盘上显示整个文件,因为这两个文件都有一些

private collectMultipartRequest (req: Request, fileFieldName: string): Promise<{ file: IFile, fields: { [k: string]: string }}> {
        const obj = {
            file: null,
            fields: {}
        };

        return new Promise ((resolve, reject) => {
            const busboy = new Busboy({ headers: req.headers, limits: { files: 1 }});

            busboy.on("file", (fieldname, file, filename, mimetype) => {
                if (fieldname === fileFieldName) {
                    const passThrough = new PassThrough();
                    file.pipe(passThrough);

                    obj.file = <IFile>{
                        mimeType: mimetype,
                        name: filename,
                        readStream: passThrough
                    };
                }
                file.resume();
            });

            busboy.on("field", (fieldName, val) => {
                obj.fields[fieldName] = val;
            });

            busboy.on("filesLimit", () => {
                reject(obj);
            });

            busboy.on("finish", async () => {
                resolve(obj);
            });

            req.pipe(busboy);
        });
    }
privateCollectMultipartRequest(req:Request,fileFieldName:string):承诺{
常量对象={
文件:null,
字段:{}
};
返回新承诺((解决、拒绝)=>{
const-busboy=new-busboy({headers:req.headers,limits:{files:1}});
on(“文件”,(字段名、文件名、文件名、mimetype)=>{
if(fieldname==fileFieldName){
const passThrough=新的passThrough();
文件管道(直通);
obj.file={
mimeType:mimeType,
名称:filename,
readStream:passThrough
};
}
resume();
});
营业员.on(“字段”,(字段名,val)=>{
对象字段[字段名]=val;
});
关于(“文件限制”,()=>{
拒绝(obj);
});
on(“完成”,异步()=>{
解决(obj);
});
所需管道(公共汽车司机);
});
}

我几乎可以肯定这是不可能的。实际上,您想要做的是延迟流的一部分以便以后读取,这是不可能的,因为流数据是按顺序传输的。我几乎可以肯定这是不可能的。实际上,您要做的是将流的部分延迟以供以后读取,这是不可能的,因为流数据是按顺序传输的。