У меня есть базовая HTML-форма, из которой я могу получить немного информации, которую я изучаю в Firebug.
Мои единственные проблемы в том, что я пытаюсь base64 кодировать данные файла перед его отправкой на сервер, где он должен быть в этой форме для сохранения в базе данных.
<input type="file" id="fileupload" />
И в Javascript + jQuery:
var file = $('#fileupload').attr("files")[0];
У меня есть некоторые операции, основанные на доступном javascript:.getAsBinary(),.getAsText(),.getAsTextURL
Однако ни один из них не возвращает полезный текст, который может быть вставлен, поскольку они содержат непригодные "символы" - я не хочу иметь "postback" в моем загруженном файле, и мне нужно иметь несколько форм, предназначенных для определенных объектов, поэтому важно, чтобы я получил файл и использовал 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 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);