Quindi quello che ho è uno DataView
con tre colonne, una delle quali è una colonna checkbox che consente agli utenti di controllare quali file vorrebbero scaricare.Wicket: download di file dopo un onSubmit
Per semplicità (credo); Ho deciso di comprimere i file in un unico file zip e di servirlo dopo che è stato generato.
Ecco quello che ho finora:
Codice::
Button downloadLogButton = new Button("downloadlogbutton") {
private static final long serialVersionUID = 1L;
@Override
public void onSubmit() {
// Some utility class I made that zips files
LogUtility util = new LogUtility();
util.zipLogFiles("sample", logs);
}
};
Form logsForm = new Form("logsform") {
};
logsForm.add(downloadLogButton);
CheckGroup<File> checkGroup = new CheckGroup<File>("logscheckgroup", new ArrayList<File>());
WebMarkupContainer logsViewContainer = new WebMarkupContainer("datatable");
DataView<File> logsView = new DataView<File>("logrows", new ListDataProvider<File>(logs)) {
private static final long serialVersionUID = 1L;
public void populateItem(final Item<File> item) {
final File file = (File) item.getModelObject();
item.add(new Check<File>("logdownloadcheck", item.getModel()));
item.add(new Label("logname", file.getName()));
SimpleDateFormat sdf = new SimpleDateFormat("E, dd MMM yyyy hh:mm a");
item.add(new Label("logdatemodified", sdf.format(file .lastModified())));
}
};
logsViewContainer.add(logsView);
checkGroup.add(logsViewContainer);
logsForm.add(checkGroup);
add(logsForm);
Come posso servire il file zip dopo che è stato generato per il download? Quali sono le mie opzioni? Mi piacerebbe evitare di dover reindirizzare a una pagina di conferma o una pagina Your download is ready
.
UPDATE
Sulla base di Xavi López risposta, ho aggiunto il seguente codice nella onSubmit
funzione S' miei Button
.
org.apache.wicket.util.file.File log = new org.apache.wicket.util.file.File("/home/keeboi/Downloads/sample.zip");
IResourceStream resourceStream = new FileResourceStream(log);
IRequestHandler target = new ResourceStreamRequestHandler(resourceStream);
getRequestCycle().scheduleRequestHandlerAfterCurrent(target);
E sto ricevendo HTTP Error 404: Not Found
.
Dal momento che sto usando Wicket 1.5, l'ho fatto in questo modo: 'org.apache.wicket.util.file.File log = new org.apache.wicket.util.file.File ("/home/keeboi/download/sample.zip "); IResourceStream resourceStream = new FileResourceStream (log); IRequestHandler target = new ResourceStreamRequestHandler (resourceStream); getRequestCycle(). ScheduleRequestHandlerAfterCurrent (target); ' Ma sto ricevendo' Errore HTTP 404: Non trovato ' –
Ok, è stato un errore nella mia classe di utilità. Grazie! –