refactor: ZIP-Download in AdminCreateInvoicesView auf StreamResource umgestellt
Statt Base64-Data-URL per executeJs wird das ZIP nun wie in InvoicesView als StreamResource registriert und heruntergeladen — robuster bei großen Sammel-ZIPs. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
+10
-5
@@ -1,5 +1,6 @@
|
|||||||
package de.assecutor.votianlt.pages.view;
|
package de.assecutor.votianlt.pages.view;
|
||||||
|
|
||||||
|
import com.vaadin.flow.component.UI;
|
||||||
import com.vaadin.flow.component.button.Button;
|
import com.vaadin.flow.component.button.Button;
|
||||||
import com.vaadin.flow.component.button.ButtonVariant;
|
import com.vaadin.flow.component.button.ButtonVariant;
|
||||||
import com.vaadin.flow.component.dialog.Dialog;
|
import com.vaadin.flow.component.dialog.Dialog;
|
||||||
@@ -19,6 +20,8 @@ import com.vaadin.flow.component.textfield.NumberField;
|
|||||||
import com.vaadin.flow.component.textfield.TextField;
|
import com.vaadin.flow.component.textfield.TextField;
|
||||||
import com.vaadin.flow.router.HasDynamicTitle;
|
import com.vaadin.flow.router.HasDynamicTitle;
|
||||||
import com.vaadin.flow.router.Route;
|
import com.vaadin.flow.router.Route;
|
||||||
|
import com.vaadin.flow.server.StreamRegistration;
|
||||||
|
import com.vaadin.flow.server.StreamResource;
|
||||||
import com.vaadin.flow.theme.lumo.LumoUtility;
|
import com.vaadin.flow.theme.lumo.LumoUtility;
|
||||||
import de.assecutor.votianlt.model.PriceTable;
|
import de.assecutor.votianlt.model.PriceTable;
|
||||||
import de.assecutor.votianlt.model.User;
|
import de.assecutor.votianlt.model.User;
|
||||||
@@ -40,6 +43,7 @@ import de.assecutor.votianlt.util.DateTimeFormatUtil;
|
|||||||
import jakarta.annotation.security.RolesAllowed;
|
import jakarta.annotation.security.RolesAllowed;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
|
import java.io.ByteArrayInputStream;
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.math.RoundingMode;
|
import java.math.RoundingMode;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
@@ -839,11 +843,12 @@ public class AdminCreateInvoicesView extends Main implements HasDynamicTitle {
|
|||||||
|
|
||||||
/** Offers the given ZIP bytes as browser download. */
|
/** Offers the given ZIP bytes as browser download. */
|
||||||
private void triggerZipDownload(byte[] zip, String fileName) {
|
private void triggerZipDownload(byte[] zip, String fileName) {
|
||||||
String base64Zip = Base64.getEncoder().encodeToString(zip);
|
StreamResource resource = new StreamResource(fileName, () -> new ByteArrayInputStream(zip));
|
||||||
getElement().executeJs("const link = document.createElement('a');"
|
resource.setContentType("application/zip");
|
||||||
+ "link.href = 'data:application/zip;base64," + base64Zip + "';" + "link.download = '"
|
resource.setCacheTime(0);
|
||||||
+ fileName.replace("'", "") + "';"
|
StreamRegistration registration = UI.getCurrent().getSession().getResourceRegistry()
|
||||||
+ "document.body.appendChild(link); link.click(); document.body.removeChild(link);");
|
.registerResource(resource);
|
||||||
|
UI.getCurrent().getPage().open(registration.getResourceUri().toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user