Проблема, с которой вы сталкиваетесь, напрямую не связана с fabricjs (ни холстом, ни даже javascript btw), но исходит из ограничений, которые имеют некоторые браузеры (включая Chrome) на максимальной длине для атрибута src
привязки Элемент () с атрибутом donwload.
Когда этот предел будет достигнут, тогда единственное, что у вас есть, - это неуправляемая «сетевая ошибка» в консоли; загрузка не удалась, но вы, как разработчик, не можете знать об этом.
Как было предложено в этом (вы отказались от метки-как) duplicate , решение должно либо напрямую получить Blob, если доступно (для холста вы можете вызвать его метод toBlob()
или сначала преобразовать ваш dataURI в Blob, а затем создать URL-адрес объекта из этого Blob.
У Fabricjs пока не реализована функция toBlob
, поэтому в вашем конкретном случае вам нужно будет сделать это позже. Вы можете найти много сценариев для преобразования dataURI в Blob, один из которых доступен в метод полифония MDN - Canvas.toBlob()
.
Тогда он будет выглядеть следующим образом:
// edited from https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toBlob#Polyfill
function dataURIToBlob(dataURI, callback) {
var binStr = atob(dataURI.split(',')[1]),
len = binStr.length,
arr = new Uint8Array(len);
for (var i = 0; i < len; i++) {
arr[i] = binStr.charCodeAt(i);
}
callback(new Blob([arr]));
}
var callback = function(blob) {
var a = document.createElement('a');
a.download = fileName;
a.innerHTML = 'download';
// the string representation of the object URL will be small enough to workaround the browser's limitations
a.href = URL.createObjectURL(blob);
// you must revoke the object URL,
// but since we can't know when the download occured, we have to attach it on the click handler..
a.onclick = function() {
// ..and to wait a frame
requestAnimationFrame(function() {
URL.revokeObjectURL(a.href);
});
a.removeAttribute('href')
};
};
dataURIToBlob(yourDataURL, callback);
BTW Windows Server AppFabric вышел из бета-версии. Это то, что я упоминал в своем предыдущем посте.
Вот ссылка на общедоступную версию; - http://blogs.technet.com/b/appfabric/archive/2010/06/07/windows-server-appfabric-now-generally-available.aspx
какие конкретные функции, по вашему мнению, можно получить на NCache, а не на AppFabric?
Что касается Скорости я услышал некоторые большие вещи о том проекте в последнее время. Это находится все еще на этапах разработки и вероятно не прайм-тайме, готовом все же. Но я думаю, что проект имеет твердую опору и станет сильным сформировавшимся продуктом от Microsoft и не уменьшится в эфир как Вы, предсказывают.
Недавно я услышал подкасты от Scott Hanselman и Полиморфный Подкаст относительно Скорости.
Хотя Скорость сделала успехи от CTP1 до CTP2, это все еще оставляет желать лучшего. Пройдет некоторое время, прежде чем они обеспечат все важные функции в распределенном кэше и еще дольше прежде чем это будет протестировано на рынке. Я желаю им удачи.
Тем временем NCache уже обеспечивает весь CTP2 и V1 и намного больше функций. NCache является первым, самым сформировавшимся, и самый многофункциональный распределенный кэш в пространстве.NET. NCache является уровнем предприятия распределенный кэш в оперативной памяти для.NET и также обеспечивает распределенное Состояние сеанса ASP.NET. Проверьте его в Распределенном Кэше.
NCache Express является полностью бесплатной версией NCache. Проверьте его в Свободном Распределенном Кэше.
Небольшое обновление этой темы для завершения.
Velocity (теперь известный как Windows Server AppFabric) уже выпущен в производство и предлагает отличную платформу распределенного кэширования. Более подробная информация доступна на сайте msdn