#java #javascript #jsf
#java #javascript #jsf
Вопрос:
Я загружаю файлы с помощью javascript следующим образом.
<h:form id="form1">
<h:inputHidden binding="#{myBean.inputHidden}" value="#{myBean.fileData}" id="hidden2"/>
<h3>Second way</h3>
<input id="upload" type="file" onchange="imageChange(this)"/>
<img src="#" height="150" id="image" />
<h:commandButton value="submit" action="#{myBean.save()}"/>
</h:form>
<script>
function readPicture(input, output) {
alert("Helo ");
if (input.files amp;amp;amp;amp; input.files[0]) {
var reader = new FileReader();
reader.onload = function(e)
{
output.attr('src', e.target.result);
alert(e.target.result);
document.getElementById('form1:hidden2').value = e.target.result;
};
reader.readAsDataURL(input.files[0]);
//reader.readAsArrayBuffer(input.files[0]);
}
}
function imageChange(input) {
alert("Helo " input);
var img = $("#image");
readPicture(input, img);
};
</script>
и я получил такой результат
данные: изображение /png;base64,ivborw0kggoaaaansuheugaaak8aaad2caiaaaaba//…
Я использовал метод readAsDataURL javascript для отображения изображения. Я хотел бы преобразовать результат в массив байтов. Есть ли какой-либо способ преобразовать массив байтов?
Ответ №1:
Предположим, вы получили результат на стороне сервера (используя переменную result
).
Сначала вам нужно удалить префикс URI данных:
result = result.substring(result.indexOf(','));
Затем преобразуйте base64 в byte[], используя javax.xml.bind.DatatypeConverter:
byte[] buf = DatatypeConverter.parseBase64Binary(result);
Дополнительно, вы можете удалить префикс URI данных на стороне клиента, если хотите, вместо удаления его на стороне сервера (первый шаг), выполнив:
var result = reader.result.slice(reader.result.indexOf(',') 1);