Je construis une extension Chrome dans laquelle je simule un POST de formulaire pour envoyer des images à un serveur. J'ai réussi à télécharger le fichier, mais son contenu est déformé. En comparant le tableau d'octets de l'uploadé et de l'original, on peut observer que chaque octet> 127 est transformé en 2 autres octets.Caractère redondant dans la charge utile POST
par exemple: 137 -> 194 137
233 -> 195 169
La charge utile POST dans l'outil de développeur Chrome suggère que l'octet redondant est ajouté avant que la demande est envoyée.
Mon fichier d'origine Contenu:
‰PNG ....
et le contenu enregistré dans la charge utile web
‰PNG ....
char pas censé être là précède le contenu. Avez-vous une idée de comment éviter ce problème? Ci-dessous le code que j'utilise pour tester:
var fr = new FileReader();
fr.onloadend = function(evt){
if(evt.target.readyState == FileReader.DONE){
//str - image content
var str = "";
var byteStr = "";
var dv = new DataView(evt.target.result);
console.log("data length = " + evt.target.result.byteLength);
for(var i = 0 ; i < evt.target.result.byteLength; i++){
var b1 = dv.getUint8(i);
str += String.fromCharCode(b1);
byteStr += b1 + " ";
}
console.log(str);
console.log(byteStr);
//use jQuery.ajax to post image to server
attachImage(str, file.name,file.type);
}
}
fr.readAsArrayBuffer(file);
Merci d'avance.
Semble comme encodage UTF-8. Pourriez-vous essayer de l'envoyer en base 64? – pimvdb
vous voulez dire javascript utilisant UTF-16 tandis que la demande de poste est envoyé en utilisant UTF-8 provoque ce problème? J'ai essayé base64 et ça n'a pas marché. Et je n'ai pas non plus accès au serveur. – vuamitom
Que voulez-vous dire base64 n'a pas fonctionné? Il suffit d'utiliser 'FileReader.readAsDataURL' pour obtenir la valeur base64, cela n'a jamais fonctionné pour moi. –