不调用关闭事件



我正在使用节点多方,尝试将流图像保存到 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);  
});

我们可以参考为什么多部分不生成接近事件的答案,以获得为什么你不能发出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);

相关内容

  • 没有找到相关文章

最新更新