全部,
我有一个尺寸数组,例如 size = [20,40,60,80]
我需要遍历这些,将 src 图像调整为每个大小并适当地命名它们。
然后,使用 knox 将它们上传到 s3,然后删除调整大小的图像。
这是我所拥有的:
http://jsfiddle.net/bpoppa/ZAcA7/
问题是流量控制。当 knox 尝试 putFile 时,我收到一条错误消息,指出它不存在,这意味着 knox 要么在调整大小完成之前运行,要么在此时已被删除。
有小费吗?感谢所有帮助。
谢谢!
全部,
我有一个尺寸数组,例如 size = [20,40,60,80]
我需要遍历这些,将 src 图像调整为每个大小并适当地命名它们。
然后,使用 knox 将它们上传到 s3,然后删除调整大小的图像。
这是我所拥有的:
http://jsfiddle.net/bpoppa/ZAcA7/
问题是流量控制。当 knox 尝试 putFile 时,我收到一条错误消息,指出它不存在,这意味着 knox 要么在调整大小完成之前运行,要么在此时已被删除。
有小费吗?感谢所有帮助。
谢谢!
您需要记住 node.js 代码是异步运行的。在您的原始代码中,knox代码在完成之前运行image.resize(回调用于告诉您操作何时完成,而不仅仅是处理错误)。Node 不会等待回调,而是继续执行函数中的代码。您还需要小心在 for 循环中使用匿名回调而不创建闭包。
通常,您希望使用回调来控制程序流程,如下面的代码,以便您仅在前面的操作完成时才执行以下操作。
var src = name + '.jpg';
for (var i = sizes.length - 1; i >= 0; i--) {
var k = i;
var dest = sizes[k] + '.jpg';
var s3 = sizes[k] + '.jpg';
resizeAndPut(src, dest, s3, sizes[k]);
}
fs.unlink(src); /* delete the source file now */
var resizeAndPut = function (src, dest, s3, size) {
easyimage.resize(
{
src: src,
dst: dest,
width: size,
height: size
}, function(err, image) {
if (err) throw err;
knox.putFile(dest, s3, function(err, res) { /* does image contain the path?, if so, might want to use image.path or the like instead of dest here */
if (err) throw err;
fs.unlink(dest); /* delete the local file*/
});
});
};