Tengo un formulario HTML básico del que puedo obtener un poco de información que estoy examinando en Firebug.
Mi único problema es que estoy tratando de codificar en base64 los datos del archivo antes de enviarlos al servidor donde se requiere que esté en ese formulario para guardarlos en la base de datos.
<input type="file" id="fileupload" />
Y en Javascript + jQuery:
var file = $('#fileupload').attr("files")[0];
Tengo algunas operaciones basadas en javascript disponible: .getAsBinary (), .getAsText (), .getAsTextURL
Sin embargo, ninguno de estos devuelve texto utilizable que se pueda insertar ya que contienen 'caracteres' inutilizables ; no quiero que se produzca una 'devolución de datos' en mi archivo cargado, y necesito tener varios formularios dirigidos a objetos específicos, por lo que es importante que obtenga el archivo y use Javascript de esta manera.
¿Cómo debo obtener el archivo de tal manera que pueda usar uno de los codificadores Javascript base64 que están ampliamente disponibles?
Gracias
Actualización: comenzando con la recompensa aquí, ¡se necesita compatibilidad con varios navegadores!
Aquí es donde estoy:
<input type="file" id="fileuploadform" />
<script type="text/javascript">
var uploadformid = 'fileuploadform';
var uploadform = document.getElementById(uploadformid);
/* method to fetch and encode specific file here based on different browsers */
</script>
Un par de problemas con la compatibilidad con varios navegadores:
var file = $j(fileUpload.toString()).attr('files')[0];
fileBody = file.getAsDataURL(); // only would works in Firefox
Además, IE no admite:
var file = $j(fileUpload.toString()).attr('files')[0];
Entonces tengo que reemplazar con:
var element = 'id';
var element = document.getElementById(id);
Para soporte de IE.
Esto funciona en Firefox, Chrome y Safari (pero no codifica correctamente el archivo, o al menos después de que se ha publicado, el archivo no sale correctamente)
var file = $j(fileUpload.toString()).attr('files')[0];
var encoded = Btoa(file);
También,
file.readAsArrayBuffer()
¿Parece que solo es compatible con HTML5?
Mucha gente sugirió: http://www.webtoolkit.info/javascript-base64.html
¿Pero esto solo devuelve un error en el método UTF_8 antes de que se codifique en base64? (o una cadena vacía)
var encoded = Base64.encode(file);