PrimeFaces p:fileUpload
, кажется, имеет отличную недокументированную функцию, где вы можете использовать встроенное событие ввода файла 'onAdd' (или что-то вроде).Я нашел это в источнике (который открыт ;-)) файла 2-fileUpload.js file
if($this.cfg.onAdd) {
$this.cfg.onAdd.call($this, file, function(processedFile) {
file = processedFile;
data.files[0] = processedFile;
this.addFileToRow(file, data);
});
}
Свойство cfg
из $this
может быть доступно через
PF('myWidgetId').cfg
И если вы объявите функцию заранее, как
function myOnAddHandler(file) {
console.log(file);
}
И добавите ее в виджет с помощью
PF('myWidgetId').cfg.myOnAddHandler;
Вы можете выбрать файл и перед загрузкойувидеть, что оно вошло в консоль
Файл {имя: "myImage.PNG", lastModified: 1533756086560, webkitRelativePath: "", размер: 38344, тип: "image / png"}
Затем вы можете расширить его, чтобы использовать API-интерфейс файла HTML5 и прочитать его
function myOnAddHandler(file) {
var reader = new FileReader();
reader.onload = function(readerEvt) {
var binaryString = readerEvt.target.result;
console.log(btoa(binaryString));
};
reader.readAsBinaryString(file);
}
. PrimeFaces сам использует этот вид в соответствующем addFileToRow
, чтобы показатьПредварительный просмотр
После просмотра большего количества java-кода PrimeFaces может даже оказаться, что вместо PF('myWidgetId').cfg.myOnAddHandler;
вы могли бы сделать <p:fileUpload onAdd="myOnAddHandler" .... />
У меня, к сожалению, нет времени, чтобы проверить это прямо сейчас, но этоможет сработать.