2017-10-06 92 views
1

我使用ng-file-upload指令从我的角度应用程序发送图像到服务器。这里是我的代码:上传分块图像文件问题

Upload.upload({ 
    url: 'http://localhost:5000/upload', 
    data: { file: blobFile }, 
    resumeChunkSize: 10000, 
}).then(function (resp) { //upload function returns a promise 
    console.log('resp: ', resp); 
}); 

图像正在以块传输。但现在,我感到震惊。我不知道如何接收这些块并合并以创建完整图像。我的服务器代码如下:

handler: function (req, res) { 
    var size = 0; 

    req.on('data', function (data) { 
     size += data.length; 
     console.log('Got chunk: ' + data.length + ' total: ' + size); 
    }); 

    req.on('end', function() { 
     console.log("total size = " + size); 
     res.send("response"); 
    }); 

    req.on('error', function (e) { 
     console.log("ERROR ERROR: " + e.message); 
    }); 
    } 

每到这时,我收到块体请求,req.on('end', ...)触发器。我是一个在这里很混乱的新手。

回答

0

是..一个分块图像并非如此简单上传...

这里的解决方案,我使用:

var request = require('request'); 
var fs = require('fs'); 

function uploadChunkedImage(url, callback){ 

    // request options 
    var options = { 
     url: url, // the url of the image 
     method: 'GET' 
    }; 

    // array of chunks 
    var chunks = []; 

    // request 
    request(options, function (err, res, body) { 
     console.log('END') 

     // body is corrupted, you can't use it for images... :-(
     // so, we will callback the concactened buffer of it instead 

     // concact chunk buffers 
     chunks = Buffer.concat(chunks); // image buffer that you can use 

     // callback the result 
     callback(err, res, chunks); 

    }).on('response', function (response) { 

     response.on('data', function (chunk) { 
      // collect chunk buffer 
      chunks.push(chunk); 
     }); 

    }); 
} 

uploadChunkedImage('http://localhost:5000/upload', function(err, res, buffer){ 
    if(!err){ 
     // save 
     fs.writeFile('./myDirPath/image.jpg', buffer); 
    }else{ 
     console.log(err); 
    } 

}); 

不要忘了在你的项目有安装requestfs NPM,Buffer原产

npm install request --save 
npm install fs --save 

更多信息:

您可以用NG-文件上传做同样的伎俩,有good example right here,否则我建议你可以试试下面(未测试)

handler: function (req, res) { 

    // array of chunks 
    var chunks= []; 

    req.on('data', function (data) { 

     // collect 
     chunks.push(data); 
     console.log('Got chunk: ' + data.length); 

    }); 

    req.on('end', function() { 

     // concact 
     chunks = Buffer.concat(chunks); 
     console.log("Total size = " + chunks.length); 

     // res.send() is deprecated, use res.write instead 
     res.write(chunks,'binary'); 
     res.end(null, 'binary'); 

    }); 

    req.on('error', function (e) { 
     console.log("ERROR ERROR: " + e.message); 
    }); 
} 

希望能帮到