загрузить файл с помощью javascript и установить в свойство компонента jsf

#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);