У меня есть базовая HTML-форма, из которой я могу получить немного информации, которую изучаю в Firebug.
Моя единственная проблема заключается в том, что я пытаюсь кодировать данные файла в base64 перед отправкой на сервер, где он должен быть в этой форме для сохранения в базе данных.
<input type="file" id="fileupload" />
А в Javascript + jQuery:
var file = $('#fileupload').attr("files")[0];
У меня есть несколько операций на основе доступного javascript: .getAsBinary (), .getAsText (), .getAsTextURL
Однако ни один из них не возвращает полезный текст, который можно вставить, поскольку они содержат непригодные для использования «символы» - я не хочу, чтобы в моем загруженном файле происходила «обратная передача», и мне нужно иметь несколько форм, нацеленных на определенные объекты, поэтому важно, чтобы я получить файл и использовать Javascript таким образом.
Как мне получить файл таким образом, чтобы я мог использовать один из широко доступных кодировщиков Javascript base64 !?
Спасибо
Обновление - Начиная баунти здесь, нужна кроссбраузерная поддержка !!!
Вот где я:
<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>
Пара проблем с кросс-браузерной поддержкой:
var file = $j(fileUpload.toString()).attr('files')[0];
fileBody = file.getAsDataURL(); // only would works in Firefox
Также IE не поддерживает:
var file = $j(fileUpload.toString()).attr('files')[0];
Поэтому мне нужно заменить на:
var element = 'id';
var element = document.getElementById(id);
Для поддержки IE.
Это работает в Firefox, Chrome и Safari (но неправильно кодирует файл или, по крайней мере, после того, как он был опубликован, файл выходит неправильно)
var file = $j(fileUpload.toString()).attr('files')[0];
var encoded = Btoa(file);
Также,
file.readAsArrayBuffer()
Кажется, поддерживается только в HTML5?
Многие предложили: http://www.webtoolkit.info/javascript-base64.html
Но это возвращает только ошибку en в методе UTF_8 до того, как он закодирует base64? (или пустая строка)
var encoded = Base64.encode(file);