【发布时间】:2017-11-03 00:53:43
【问题描述】:
我有以下 javascript 从画布生成图像并将它们上传到服务器。
var can = document.createElement('canvas');
can.width = 600;
can.height = 600;
var ctx = can.getContext('2d');
ctx.fillRect(0, 0, can.width, can.height);
ctx.fillText("Julia", can.width/2, can.height/2);
can.toBlob(uploadImage, "image/jpg", 0.9);
function uploadImage(jpeg) {
var data = new FormData();
data.append('image', jpeg, 'image.jpg');
...
}
每隔一段时间,结果就会像上面那样,只是部分绘制。多个画布按顺序处理和上传,仅在 ajax 完成时继续进行(在 ... 部分),因此一次只能处理一个。
你见过这种情况吗?如果是这样,在这个过程中我应该在哪里进一步调试?可能是上下文对象中的设置或其他内容?
编辑
上传是一个 ajax 帖子,其承诺仅在成功分支上解决。它实际上使用了 Angular 的 $http 服务:
$http({method: 'POST', url: '...', data: data}).then(function(response) {
// callback that processes and uploads the next image
});
【问题讨论】:
-
在我看来,图片上传已中断,您只有部分图片。我从未见过 toBlob 或 toDataURL 对图像执行此操作,但我看到很多不完整的 jpeg 在由于连接失败而关闭和上传时看起来像这样
-
你能显示上传的代码吗?
-
那么如果服务器没有读取整个请求,javascript 是否有可能看到成功路径?...我认为不会,但也许这是一个角度问题。也许是服务器上的一个简单缓冲问题...也许我可以将 blob 大小作为另一个表单参数传递,并根据服务器上接收到的文件大小检查它。
-
@RyanCalhoun 是的,这听起来是个好主意。如果您无法轻松重现,您肯定需要进行更多日志记录以找出损坏发生的位置
-
嗨@RyanCalhoun 你检查我的答案了吗,有帮助吗
标签: javascript google-chrome html5-canvas chromium form-data