Rufen Sie ein image vom server, speichern Sie es in "localStorage", und zeigen Sie es
Dies sollte einfach genug sein, aber nach dem Ringkampf mit ihm für Stunden, ich kann es immer noch nicht, dass es funktioniert. Bisher sind alle meine versuche haben dazu geführt, das Bild zu 'beschädigt oder abgeschnitten wird', laut firefox.
Um das Bild vom server mit der jquery-ajax-call:
$.ajax({
async: false,
url: db[key]["DocumentLink"],
success: function (result2) {
Base64-codieren Sie das Bild und speichern Sie es in localStore:
In diesem Beispiel verwende ich das jquery base64-encoding plugin, aber ich habe versucht mehrere.
var dbKey = "Doc " + db[key]["ID"] + " " + db[key]["Title"];
console.log("storing: " + db[key]["DocumentLink"] + " in " + dbKey + "\n");
localStorage.removeItem(dbKey);
var base64Image = $.base64Encode(result2);
console.log(base64Image.length);
localStorage.setItem(dbKey, base64Image);
console.log("is stored: " + db[key]["DocumentLink"] + " in " + dbKey + "\n");
}
})
Display das Bild mit einem data-url:
function openImageFromDB(dbKey) {
console.log("Trying to display image with key " + dbKey);
var base64Img = localStorage.getItem(dbKey);
document.getElementById("documentHolder").src='data:image/jpeg;base64,' + base64Img;
}
Die entsprechenden img:
<img id="documentHolder" alt="Image view placeholder" src="" />
Aber auf jeden versuchen, firefox zeigt:
Image corrupt or truncated: data:image/jpeg;base64,77+977+977+977+9a<... much longer string>
Die Url: Punkte, um eine gültige jpeg-Bild, und die base64Image.die Länge und die Fehlermeldung zeigen, dass die var /localStorage tatsächlich enthalten, was zu sein scheint base64-codierten Daten.
Irgendwelche Ideen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Javascript (AJAX call)
PHP - ( load.php )
Lesen, das könnte Ihnen helfen:
PS: vielleicht Ihre
Base64
ist falsch?Browser haben Größenbeschränkungen für andere als die localStorage-limit von 5 MB. Die Daten für die
<img src="data:image/jpeg;base64,...">
ist auch begrenzt und wird in der Regel viel weniger als 5MB. Der einfachste Weg, um dieses ist es, einfach die Datei-Namen per localStorage-und lassen Sie das Browser-caching die Arbeit machen.Stellt sich heraus, AJAX kann nicht zuverlässig verwendet werden, um die übertragung von binären Daten. Die Lösung ist die Ausführung des Base64-encoding server-Seite, und übertragen Sie die resultierende Zeichenfolge durch AJAX.
Den obigen php-code funktioniert. Wer auf der Suche für ein ASP.Net /C# - Lösung:
Bitte beachten Sie, dass dieser code ist NICHT SICHER zu setzen, die direkt auf die äußere Welt.
Ich persönlich benutze eine wrapper-Funktion, die analysiert den Pfad aus einer db.
Können Sie Daten abrufen, die uri (die enthalten die base-64-Codierung), die über JavaScript mit dem HTML5 canvas-element.
dataUri
enthält nun die Daten-uri für das Bild enthalten wird, zusammen mit einem kurzen Präfix, die base-64-Codierung des Bildes.Werden Sie sicher, dass Sie die Erkennung für die canvas-Unterstützung. IE 8 und älter nicht unterstützt.