Вам понадобится получить объект File из элемента ...
И вы можете сделать это так:
@Override
public elemental.html.FileList fileSelected(FileUpload fileUpload) {
final elemental.html.InputElement element = (elemental.html.InputElement) fileUpload.getElement();
return element.getFiles();
}
Как вы можете видеть, он использует gwt elemental.
После того, как вы извлекли объект File, вы можете сделать это:
import com.google.gwt.user.client.Element;
import elemental.html.File;
import elemental.html.ImageElement;
import elemental2.dom.FileReader;
public void loadPreview(File file) {
FileReader reader = new FileReader();
reader.onloadend = pe -> {
Element element0 = this.image.getElement();
com.google.gwt.dom.client.Element element = element0;
ImageElement image = (ImageElement) element;
image.setSrc(reader.result.asString());
image.addEventListener("load", evt -> {
LOG.debug("image loaded event {}", evt);
int owidth = image.getWidth();
int oheight = image.getHeight();
LOG.debug("widht {}', height {}", owidth, oheight);
//IMAGE_VIEW_PORT_WIDTH
//IMAGE_VIEW_PORT_HEIGHT
int height;
int width;
if (owidth >= (destAspectRatio) * oheight) {
height = (int) Math.round(IMAGE_VIEW_PORT_WIDTH * (oheight / (double) owidth));
width = IMAGE_VIEW_PORT_WIDTH;
} else {
width = (int) Math.round(IMAGE_VIEW_PORT_HEIGHT * (owidth / (double) oheight));
height = IMAGE_VIEW_PORT_HEIGHT;
}
image.setWidth(width);
image.setHeight(height);
this.image.setVisible(true);
LOG.debug("new width {}, new height {}", width, height);
});
return null;
};
reader.readAsDataURL((elemental2.dom.File) file);
}
Извините, это так сложно - это код, который у меня есть, и я думаю, что он определяет правильный размер порта просмотра, так что изображение установлено на правильный размер (хотя я не уверен на 100%).
Вы можете обойтись без обработчика image.addEventListener ("load" ...), так как я считаю, что image.setSrc (reader.result.asString ()) является битом денег.
Он использует много элементалов и elemental2, так как фондовый gwt просто не дает вам достаточного представления о реальном API, с которым вы имеете дело.
Обратите внимание, что здесь используется объект File из elemental.