使用request,gridfs-stream和multer的POST文件



在我的节点.js应用程序中,我需要使用 GridFS 从 MongoDB 读取数据并通过POST请求将其上传到另一台服务器,我正在使用模块 gridfs-streamrequestmulter
根据request文档,我可以简单地添加一个流用于multipart/form-data,所以我这样做:

var fileUuid = "myFilename";
var options = {
    url: "url.to/my/target/",
    method: "POST",
    header: {"Content-Type": "multipart/form-data"},
    formData: {
        filedata: gfs.createReadStream({filename: fileUuid})
    }
}
request(options, function(error, response, body) {
    if (error) {
        console.log("[" + getDateTime() + "] Error replicating file:");
        console.log(error);
        return;
    }
    console.log('statusCode: ', response && response.statusCode); 
    console.log('body: ', body);
});

在我的接收服务器上,我有以下代码:

var upload = multer({ dest: './tmp_upload/' })
app.post('/my/target', upload.single('filedata'), function(req, res) {
    console.log('['+getDateTime()+'] Request received');
}

但是每当我执行请求时,我的发送服务器上都会收到以下错误:

[2019:07:26:16:52:00] Error replicating file:
Error: write ECONNRESET

在我的接收服务器上:

Error: Unexpected end of multipart data
    at c:Users...node_modulesdicerlibDicer.js:62:28
    at process._tickCallback (internal/process/next_tick.js:61:11)

任何人都可以给我一个提示,如何将我的文件从一台服务器POST到另一台服务器?

编辑:
问题似乎是gfs.createReadStream({filename: fileUuid})类型的流...当我首先将文件写入文件系统,而不是将fs.createReadStream(...)作为formData放入表单中时,它就可以工作了。
但是,是否有一种选择可以将流直接定向到 formData 中,而不必先将其写入磁盘?

所以我最终使用了一个临时文件,我从数据库中读取该文件,将其写入磁盘并创建一个新readStream,然后将其放入请求中。请求成功后,我从磁盘中删除临时文件并继续我的代码:

var fsstreamwrite = fs.createWriteStream("./tmp/" + myFile);
var readstream = gfs.createReadStream( {filename: myFile} );
readstream.pipe(fsstreamwrite);
readstream.on("close", function () {
    console.log("File read successfully from database");
    var options = {
        url: "url.to/my/target/",
        method: "POST",
        enctype: "multipart/form-data",
        formData: {
            "filedata": fs.createReadStream('./tmp/' + myFile)
        }
    }
    request(options, function(error, response, body) {
        if (error) {
            // error handling
            return;
        }
        // delete temporary file
        fs.unlinkSync('./tmp/' + myFile)
        // continue with my stuff...
    });                                    
});