J'utilise Prototype pour soumettre une demande POST, et le postdata contient un certain nombre de champs, dont l'un est des données binaires d'un fichier (dans ce cas, une feuille de calcul Excel que l'utilisateur a sélectionnée J'utilise l'interface HTML5 FileReader pour obtenir le contenu du fichier via FileReader.readAsBinaryString()
qui fonctionne bien. Si j'utilise charCodeAt()
pour imprimer divers caractères dans la chaîne, ils sortent avec les valeurs attendues.Soumettre des données binaires via l'appel Prototype Ajax
Cependant, une fois que j'ai mis ces données de chaîne dans un objet (avec les autres champs de formulaire) et que je les ai passées en tant qu'option parameters
à Ajax.Request()
de Prototype, les données arrivent corrompues. Certaines valeurs de caractères telles que 0x82
sont remplacées par 0xC2 0x82
, 0xAC
est remplacée par 0xC2 0xAC
, et ainsi de suite.
J'ai essayé d'utiliser window.atob()
pour encoder la chaîne en base64, mais cela échoue avec InvalidCharacterError: String contains an invalid character
, donc il y a clairement un type de traitement que je dois éviter.
Est-ce que quelqu'un sait comment transmettre des données binaires via le Ajax.Request()
de Prototype tout en incluant des champs de formulaire supplémentaires dans la même requête?
J'ai essayé ceci, en l'envoyant à un script PHP, et j'ai également dû définir 'contentType: 'multipart/form- données » . Cependant, alors il arrive avec l'erreur PHP 'Frontière manquante dans multipart/form-data', donc je suppose que vous ne pouvez pas définir le' postBody' à l'objet 'FormData'? – Malvineous
Ne pas définir contentType à 'multipart/form-data' le définir à null comme indiqué dans ma réponse. – Musa
La définition de 'contentType: null' pour votre réponse (sans guillemets ni rien) entraîne l'envoi de la requête HTTP par le navigateur avec' Content-Type: null; jeu de caractères = UTF-8'. Il semble que la limite MIME doive être spécifiée dans l'en-tête HTTP Content-Type pour que les données 'multipart/form-type' fonctionnent correctement, mais je ne vois pas comment cela devrait être fait. – Malvineous