Hi,
i recently updatet my vaadin version vom 24.7.latest to the current Version 24.8.3 and lots of component are marked for removal. Currently iam stuck converting my uploads to the new implentation. Here are some full grown example i cant convert.
Here some basic Example i often use. Before Upload i check if the path exists and if not i create it.
Upload bildUpload = new Upload((MultiFileReceiver)(dateiname, mimeType)->{
File fullpath = new File(pathService.getSpamExamplePath());
File file = new File(fullpath, dateiname);
if (!fullPath.exists()) {
fullPath.mkdir();
}
try {
return new FileOutputStream(file);
}catch(FileNotFoundException e) {
e.printStackTrace();
return null;
}
});
Here some more advaneced version.
private Upload projektFotos(SecurityService securityService){
Mitarbeiter logedInMitarbeiter ....;
Upload bildUpload = new Upload((MultiFileReceiver) (filename, mimeType) -> {
File fullPath = new File(pathService.getProjektFotos()+"\\"+projektAuswahl.asSingleSelect().getValue().getId());
if (!fullPath.exists()) {
boolean created = fullPath.mkdir();
if(!created){
System.out.println("Path "+fullPath.getPath()+" cloud not be created!");
}
}
File file = new File(fullPath, filename);
try {
return new FileOutputStream(file);
} catch (FileNotFoundException e1) {
e1.printStackTrace();
return null;
}
});
bildUpload.setMaxFiles(0); // To prevent Uploading a file without selected Project
bildUpload.setMaxFileSize(20971520);
bildUpload.setAcceptedFileTypes("image/jpeg", "image/jpg");
bildUpload.setDropLabel(new Span("Fotoupload jpg jpeg"));
bildUpload.addFileRejectedListener(e -> Notification.show("Es können nur jpg und jpeg als Bild hochgeladen werden, mit max. 20MB.",5000, Notification.Position.MIDDLE));
bildUpload.addSucceededListener(e -> {
try {
String newFilename = e.getFileName();
File originalFile = new File(new File(pathService.getProjektFotos()+"\\"+projektAuswahl.asSingleSelect().getValue().getId()), newFilename);
Long id = fotoService.einfuegenFotoBasicDetailsVomProjekt(new Foto(newFilename, projektAuswahl.asSingleSelect().getValue().getId(), 0, logedInMitarbeiter.getId(), LocalDate.now()));
BufferedImage originalImage = ImageIO.read(originalFile);
if(originalImage != null){
fotoService.updateBildAufloesung(id, originalImage.getWidth(), originalImage.getHeight());
BufferedImage originalImageWithWatermark = ImageIO.read(originalFile);
BufferedImage resizedImage;
if(originalImage.getWidth() > 450){
resizedImage = Scalr.resize(originalImage, Scalr.Method.QUALITY, Scalr.Mode.FIT_TO_HEIGHT, 450);
}else {
resizedImage = originalImage;
}
// Wasserzeichen mit Outline
//Setup für Qualität des Renderings
Graphics2D graphics2D = (Graphics2D)originalImageWithWatermark.getGraphics();
graphics2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
graphics2D.setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION, RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY);
graphics2D.setRenderingHint(RenderingHints.KEY_COLOR_RENDERING, RenderingHints.VALUE_COLOR_RENDER_QUALITY);
graphics2D.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
graphics2D.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
//Typ und Text
Font font = new Font("Arial", Font.BOLD, 30);
String watermarkText = "(C) Companyname";
//Wasserzeichen
graphics2D.setFont(font);
graphics2D.drawString(watermarkText, originalImageWithWatermark.getWidth()-570, originalImageWithWatermark.getHeight()-20);
//Outline vom Wasserzeichen
TextLayout textLayout = new TextLayout(watermarkText, font, graphics2D.getFontRenderContext());
graphics2D.setColor(new Color(0, 0, 0,255));
graphics2D.translate(originalImageWithWatermark.getWidth()-570, originalImageWithWatermark.getHeight()-20);
Shape shape = textLayout.getOutline(null);
graphics2D.draw(shape);
File previewImage = new File(new File(pathService.getProjektFotos()+"\\"+projektAuswahl.asSingleSelect().getValue().getId()), "Vorschau_"+newFilename);
File imageMitWasserzeichen = new File(new File(pathService.getProjektFotos()+"\\"+projektAuswahl.asSingleSelect().getValue().getId()), "Wasserzeichen_"+newFilename);
ImageIO.write(resizedImage, "jpg", previewImage);
ImageIO.write(originalImageWithWatermark, "jpg", imageMitWasserzeichen);
}
reloadProjektfotos();
} catch (IOException e1) {
e1.printStackTrace();
}
});
return bildUpload;
}
My try to convert it.
Upload bildUpload = new Upload(uploadEvent -> {
FileUploadCallback fileUploadCallbackOnSuccess = (metadata, file) -> {
try {
String newFilename = metadata.fileName();
File originalFile = new File(new File(pathService.getProjektFotos()+"\\"+projektAuswahl.asSingleSelect().getValue().getId()), newFilename);
Long id = fotoService.einfuegenFotoBasicDetailsVomProjekt(new Foto(newFilename, projektAuswahl.asSingleSelect().getValue().getId(), 0, logedInMitarbeiter.getId(), LocalDate.now()));
BufferedImage originalImage = ImageIO.read(originalFile);
if(originalImage != null){
fotoService.updateBildAufloesung(id, originalImage.getWidth(), originalImage.getHeight());
BufferedImage originalImageWithWatermark = ImageIO.read(originalFile);
BufferedImage resizedImage;
if(originalImage.getWidth() > 450){
resizedImage = Scalr.resize(originalImage, Scalr.Method.QUALITY, Scalr.Mode.FIT_TO_HEIGHT, 450);
}else {
resizedImage = originalImage;
}
// Wasserzeichen mit Outline
//Setup für Qualität des Renderings
Graphics2D graphics2D = (Graphics2D)originalImageWithWatermark.getGraphics();
graphics2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
graphics2D.setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION, RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY);
graphics2D.setRenderingHint(RenderingHints.KEY_COLOR_RENDERING, RenderingHints.VALUE_COLOR_RENDER_QUALITY);
graphics2D.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
graphics2D.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
//Typ und Text
Font font = new Font("Arial", Font.BOLD, 30);
String watermarkText = "(C)MyCompany";
//Wasserzeichen
graphics2D.setFont(font);
graphics2D.drawString(watermarkText, originalImageWithWatermark.getWidth()-570, originalImageWithWatermark.getHeight()-20);
//Outline vom Wasserzeichen
TextLayout textLayout = new TextLayout(watermarkText, font, graphics2D.getFontRenderContext());
graphics2D.setColor(new Color(0, 0, 0,255));
graphics2D.translate(originalImageWithWatermark.getWidth()-570, originalImageWithWatermark.getHeight()-20);
Shape shape = textLayout.getOutline(null);
graphics2D.draw(shape);
File previewImage = new File(new File(pathService.getProjektFotos()+"\\"+projektAuswahl.asSingleSelect().getValue().getId()), "Vorschau_"+newFilename);
File imageMitWasserzeichen = new File(new File(pathService.getProjektFotos()+"\\"+projektAuswahl.asSingleSelect().getValue().getId()), "Wasserzeichen_"+newFilename);
ImageIO.write(resizedImage, "jpg", previewImage);
ImageIO.write(originalImageWithWatermark, "jpg", imageMitWasserzeichen);
}
reloadProjektfotos();
} catch (IOException e1) {
e1.printStackTrace();
}
};
FileFactory fileFactory = (metadata) -> new File(pathService.getProjektFotos()+"\\"+projektAuswahl.asSingleSelect().getValue().getId(), metadata.fileName());//File that will be created
File fullPathToFolder = new File(pathService.getProjektFotos()+"\\"+projektAuswahl.asSingleSelect().getValue().getId()); //Path where the file will be stored
if (!fullPathToFolder.exists()) {
boolean created = fullPathToFolder.mkdir();
if(!created){
System.out.println("Path "+fullPathToFolder.getPath()+" cloud not be created!");
}
}
UploadHandler.toFile(fileUploadCallbackOnSuccess, fileFactory);
});
bildUpload.setMaxFiles(0);
bildUpload.setMaxFileSize(20971520);
bildUpload.setAcceptedFileTypes("image/jpeg", "image/jpg");
bildUpload.setDropLabel(new Span("Fotoupload jpg jpeg"));
bildUpload.addFileRejectedListener(e -> Notification.show("Es können nur jpg und jpeg als Bild hochgeladen werden, mit max. 20MB.",5000, Notification.Position.MIDDLE));