我正在使用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', ...)
。我是一个新手,在这里很困惑。 最佳答案
是的..分块的图像上传起来并不简单...
这是我使用的解决方案:
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);
}
});
不要忘记使用npm在项目中安装
request
和fs
,Buffer
是本机的 npm install request --save
npm install fs --save
有关更多信息:
request repository
fs documentation
您可以使用ng-file-upload进行相同的操作,有一个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);
});
}
希望能有所帮助
关于javascript - 上传图片文件分割问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46601737/