API File de Html5 - Utilisations BLOB?
J'ai un fichier d'entrée : (jsbin)
<input type="file" accept="image/*" id="input" multiple onchange='handleFiles(this)' />
Qui , une fois le fichier sélectionné, affiche les images de petite taille de l'image sélectionnée :
Je peux le faire dans deux façons :
à l'aide de FileReader :
function handleFiles(t) //t=this
{
var fileList = t.files;
for (var i = 0; i < fileList.length; i++)
{
var file = fileList[i];
var img = document.createElement("img");
img.style... = ...
document.getElementById('body').appendChild(img);
var reader = new FileReader();
reader.onload = (function (aImg)
{
return function (e)
{
aImg.src = e.target.result;
};
})(img);
reader.readAsDataURL(file);
}
//...
}
à l'aide de ObjectURL /BLOB :
function handleFiles(t)
{
var fileList = t.files;
for (var i = 0; i < fileList.length; i++)
{
var file = fileList[i];
var img = document.createElement("img");
img.src = window.URL.createObjectURL(file);
img.onload = function (e)
{
window.URL.revokeObjectURL(this.src);
}
document.getElementById('body').appendChild(img);
}
}
Comme vous pouvez le voir , les deux travaux :
MAIS
Le code html résultat est différent :
Question :
Avec la première , je sais déjà ce que je peux faire , c'est de la pure data-uri de données.
Mais quand dois-je utiliser la deuxième approche(blob) ?
Je veux dire - ce que je peux faire blob:http%3A//run.jsbin.com/82b29cc5-8452-4ae2-80ca-a949898f4295
?
p.s.
mdn explication sur URL.createObjectURL
ne m'aide pas sur quand dois-je utiliser chaque.
source d'informationauteur Royi Namir
Vous devez vous connecter pour publier un commentaire.
La longueur d'un
blob:
URL est toujours au-dessous d'une limite raisonnable.De données d'Url peut être arbitrairement grand. Par conséquent, lorsque les données de l'URL est trop longue, certains navigateurs (IE, toux) n'affiche pas l'image. Donc, si vous voulez afficher des fichiers de très grande taille, à l'aide de
blob:
(oufilesystem:
Url) pourrait faire plus de sens que de données d'Url.Aussi, vous pouvez directement récupérer des données à partir d'un
blob:
URL (à condition que le blob n'a pas été révoquée encore, par exemple, parce que le document a été déchargé, et de la même origine que la politique n'est pas violée) à l'aide deXMLHttpRequest
. Par exemple, le code suivant renvoie le contenu d'une goutte d'URL sous forme de texte:Si vous souhaitez soumettre le contenu d'un Fichier à un serveur à l'aide de
XMLHttpRequest
il n'a pas vraiment de sens d'utiliser unblob:
oudata:
URL. Il vous suffit de soumettre leFile
objet directement à l'aide de laFormData
objet. Si vous avez perdu l'originalFile
de référence, et vous avez seulement unblob:
URL, vous pouvez utiliser l'extrait précédent pour obtenir unBlob
l'objet de nouveau pour une utilisation dansFormData
.Donné un
data:
-URL, il est loin d'être facile de récupérer les données d'origine. Firefox et Opera 12 - permettre l'utilisation d'undata:
-URL dansXMLHttpRequest
. Chrome, Internet Explorer, Safari et Opera 15+ refuser de charger des données d'URL via XMLHttpRequest. Donc, par rapport à la récupération de données,blob:
les URLs sont de qualité supérieure plusdata:
-Url.Si vous voulez afficher le résultat d'un Fichier dans une image différente sur la même origine, certainement utiliser un
blob:
URL. Si vous voulez manipuler les données contenues dans unBlob
dans un cadre fait (peut-être sur une autre origine), ne pas utiliser de goutte ou de données Urlenvoyer les données directement à l'aide depostMessage
.blob:
-Les url sont généralement mieux quedata:
-Url pour les représentant (binaire) de données. Pour les données de petite taille (max 20 ko),data:
Url peut être un meilleur choix en raison de l'augmentation de la gamme de navigateurs pris en charge: Comparer Puis-je utiliser Blob Url avec Puis-je utiliser les Données Uri (si vous êtes en train de rédiger un complexe application HTML5, les chances sont que vous n'allez pas à l'appui de IE9-).Voici les principales différences dans la façon dont vous pouvez utiliser les deux types d'Url:
De Données Url:
Pour:
Contre:
BLOB Url:
Pour:
FileReader
et les données ne peuvent pas être extraites directement à partir de l'URL, comme dans les Données d'UrlContre:
Cette liste donne l'impression de données d'Url sont un avantage évident, mais BLOB url sont plus rapides à créer, et, sauf si vous avez besoin d'envoyer l'url à d'autres utilisateurs ou sur le serveur, vous devez les utiliser parce qu'ils sont plus rapides, plus faciles à utiliser, plus faciles à gérer, et mieux pour IE. Mais si vous avez besoin d'envoyer une url pour le serveur ou à un autre utilisateur, je vous recommande en quelque sorte la transmission de la goutte directement à l'aide de XHR2. Les données d'url ne sont pas super.