Eu tenho um formulário HTML básico do qual posso obter algumas informações que estou examinando no Firebug.
Meu único problema é que estou tentando codificar os dados do arquivo em base64 antes de enviá-los ao servidor, onde precisam estar nessa forma para serem salvos no banco de dados.
<input type="file" id="fileupload" />
E em Javascript + jQuery:
var file = $('#fileupload').attr("files")[0];
Tenho algumas operações baseadas em javascript disponível: .getAsBinary (), .getAsText (), .getAsTextURL
No entanto, nenhum desses retorna texto utilizável que pode ser inserido, pois contém 'caracteres' inutilizáveis - não quero que ocorra um 'postback' no meu arquivo carregado e preciso ter vários formulários direcionados a objetos específicos, por isso é importante. obtenha o arquivo e use Javascript desta forma.
Como devo obter o arquivo de forma que possa usar um dos codificadores Javascript base64 que estão amplamente disponíveis !?
obrigado
Atualização - Começando bounty aqui, preciso de suporte para vários navegadores !!!
É aqui que estou:
<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>
Alguns problemas com o suporte para vários navegadores:
var file = $j(fileUpload.toString()).attr('files')[0];
fileBody = file.getAsDataURL(); // only would works in Firefox
Além disso, o IE não suporta:
var file = $j(fileUpload.toString()).attr('files')[0];
Portanto, tenho que substituir por:
var element = 'id';
var element = document.getElementById(id);
Para suporte do IE.
Isso funciona no Firefox, Chrome e Safari (mas não codifica corretamente o arquivo ou, pelo menos, depois de postado, o arquivo não sai direito)
var file = $j(fileUpload.toString()).attr('files')[0];
var encoded = Btoa(file);
Além disso,
file.readAsArrayBuffer()
Parece ser compatível apenas com HTML5?
Muitas pessoas sugeriram: http://www.webtoolkit.info/javascript-base64.html
Mas isso só retorna um erro no método UTF_8 antes de codificar em base64? (ou uma string vazia)
var encoded = Base64.encode(file);