【问题标题】:close event is not called不调用关闭事件
【发布时间】:2016-06-13 11:06:11
【问题描述】:

我正在使用节点多方,试图将流图像保存到 Azure Blob 存储,但没有调用“关闭”事件?:

var form = new multiparty.Form();
var fields = [];
var parts = [];

form.on('error', function(err) {
    console.log('Error parsing form: ' + err.stack);
});

form.on('field', function(name, value){
    fields.push({name:name, value: value});
});

form.on('part', function(part){
    parts.push({name:part.name, value:part});
});

form.on('close', function(){
        // How do I get the name called image from parts array, and save it to the azure storage?
        var filename = part.filename;
        var size = part.byteCount;

        var onError = function(error) {
            if (error) {
                res.send({ grrr: error });
            }
        };
        blobService.createBlockBlobFromStream('container', filename, part,    size, onError);  
});

【问题讨论】:

  • part 是可在part 事件中访问的可读流。您应该将上传到 azure 的逻辑放在 part 事件中。示例github.com/andrewrk/node-multiparty/blob/master/examples/…
  • 我想在上传之前检查一些字段信息。
  • 什么样的信息?
  • 来自字段的信息。
  • 好的,我知道了,在 POST 期间,我必须将字段放在文件的顶部。

标签: node.js azure express multipart


【解决方案1】:

我们可以参考Why multipart is not generating close events 的答案来了解为什么不能发出close 事件。

由于您没有将数据传输到文件,因此仅当所有数据都已从 req 对象中传输出时才会发出 close ,从而导致 req 在内部发出它的完成事件,这会触发多方关闭事件。

因此,除了将所有字段放在表单中的文件顶部之外,您还可以尝试利用file 事件将文件托管在 tmp 文件夹中,然后在close 事件中处理它们。例如:

var blobService = azure.createBlobService();
var form = new multiparty.Form({autoFiles:true});
var fields = [];
var files = [];
form.on('field', function(name, value){
    fields.push({name:name, value: value});
});
form.on('file',function(name,file){
  files.push(file);
});
form.on('close',function(){
  console.log(files);
  var file = files[0];
    var onError = function(error) {
        if (error) {
            res.send({ grrr: error });
        }
    };

    blobService.createBlockBlobFromStream(container, file.originalFilename, fs.createReadStream(file.path),file.size,file.headers, function(error) {
    if (error) {
      // error handling
      console.log(error);
    }else{
      res.end('File uploaded successfully');
    }
  });
});
form.parse(req);

【讨论】:

    猜你喜欢
    • 2021-06-13
    • 2021-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多