Comment puis-je charger des données d'image binaire à l'aide de Javascript et XMLHttpRequest?
J'ai essayé de charger une image côté client et base64 encode les octets retournés par le serveur afin de le donner à effectuer certaines opérations. IE a un RequestBody propriété de l'objet XMLHttpRequest, mais je n'arrive pas à l'utiliser, et RequestText est tronqué. Dans Firefox, RequestText est là, mais semble corrompu.
- Après quelques jours d'effort, j'ai été capable de faire ce travail, bien que les informations sur l'Internet pour faire de telles binaire manipulation est assez rare. Je pense qu'il peut être utile pour les autres, surtout lorsqu'il s'agit de Données Uri, donc je l'ai détaillé dans mon travail ici: http://emilsblog.lerch.org/2009/07/javascript-hacks-using-xhr-to-load.html
Vous devez vous connecter pour publier un commentaire.
Voici comment je l'ai fait.
Cette technique est fourni dans une réponse à l'autre question, mais il est également pertinent ici.
Je ne voulais pas en base64 encode quoi que ce soit. Je voulais télécharger et d'analyser des fichiers binaires dans le navigateur à l'aide de Javascript, sans modifier le serveur pour les encoder spécialement. J'ai trouvé que dans Firefox, par le fait de contraindre le type mime de la réponse via
overrideMimeType()
, je pourrais utiliserXMLHttpRequest.responseText
. Sur IE, c'est différent parce que:responseText
sur IE tronque le premier zéro. Pour les flux binaires c'est un gros problème.il n'y a pas de
XMLHttpRequest.overrideMimeType()
, à force c'est à dire de traiter les flux binaires sous forme de texte.bien qu'il y est un
XMLHttpRequest.responseBody
(c'est à dire uniquement!) qui est spécifiquement conçu pour être utilisé avec des données binaires ruisseaux, maddeningly que la propriété n'est pas utilisable à partir de Javascript.Par conséquent, il est nécessaire de convertir IE
responseBody
de propriété sur une chose qui ressemble àresponseText
à partir de FireFox, avec le mime-type de contrainte. Ceci est possible en utilisant injecté VBScript.Pour en faire de la cross-browser, vous avez besoin pour emballer juste le navigateur spécifique de la logique conditionnelle. C'est ce que j'ai utilisé:
...alors appel
readByte(i)
pour obtenir de l'octet à l' ith position dans le fichier binaire.Bonne chance.
Crédit à Miskun pour le VBScript logique de conversion.
Si vous utilisez un lit bébé, vous pouvez toujours configurer un intermédiaire de la passerelle où la demande est présentée et transformé encodé en base64 dans ce cas) en quelque chose de plus acceptable avant d'être renvoyé au client.
Vous pourriez avoir le serveur de retour en base64 texte, plutôt que de faire que le chiffrement côté client.
Par exemple, (dans ASP.NET) une demande d' /ImageAsBase64.ashx?fichier=/images/myimage.png peut être codé pour lire le fichier, base64encode il, et de les lire comme une réponse.
Il va vraiment être à peu près la même chose en PHP ou quoi que ce soit.