Das Problem, das Sie ist konfrontiert sind nicht direkt mit fabricjs bezogen, (noch Leinwand und nicht einmal Javascript btw) , kommt aber von Einschränkungen, die einige Browser (einschließlich Chrome) auf die maximale Länge für das src
-Attribut eines Anchor-Elements (<a>
) mit dem donwload-Attribut haben.
Wenn dieses Limit erreicht ist, dann ist das einzige, was Sie haben, dieser unzugängliche "Network Error" in der Konsole; der Download ist fehlgeschlagen, aber Sie als Entwickler können davon nichts wissen.
Wie in dieser vorgeschlagen (Sie-verweigerte-to-mark-as-)duplicate ist die Lösung entweder erhalten direkt einen Blob, wenn verfügbar (für die Leinwand, können Sie seine toBlob()
Methode aufrufen, oder zum ersten convert Ihre dataURI auf einen Fleck, und dann ein object URL von diesem Blob erstellen.
Fabricjs keine toBlob
Funktion noch nicht umgesetzt zu haben scheinen, so in Ihrem genauen Fall, werden Sie das später tun.
Sie kann viele Skripts finden, um DataURI in Blob zu konvertieren, eine ist in MDN's polyfill zu Canvas.toBlob()
Methode verfügbar.
Dann würde es so aussehen:
// 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);
Haben Sie diesen Fehler nur bei Chrome? Wenn dies der Fall ist, hängt dies wahrscheinlich zusammen: http: // stackoverflow.com/questions/36918075/is-it-possible-zu-programmatically-detect-size-limit-fuer-daten-url/36951356 aber für den gebrauchsfall, anstatt toBlob zu nennen (was ich nicht für möglich halte In fabricjs) müssen Sie das dataURI in ein Blob konvertieren, bevor Sie die href des Ankers auf die Objekt-URL dieses Blobs setzen. (Sie können [MDNs Polyfill für 'toBlob' überprüfen (https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toBlob#Polyfill) und wählen Sie ihre Art der Umwandlung eines DataURI in ein Blob) – Kaiido
Muss ich nur den Wert für "href to blob" setzen? – Abhinav
Nein zu einer Objekt-URL, die aus dem Blob erstellt wurde ('URL.createObjectURL (blob)'). Überprüfen Sie die Antwort auf den vorgeschlagenen Betrogenen. – Kaiido