varios txt desde descargar archivos archivo java web wicket wicket-1.5

java - txt - Wicket: descarga de archivos después de una presentación



descargar varios archivos java (1)

Puede hacer simplemente como DownloadLink y crear un FileResourceStream desde el archivo comprimido. Luego, simplemente cambie el objetivo del ciclo de solicitud actual:

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); IResourceStream resourceStream = new FileResourceStream( new org.apache.wicket.util.file.File(someFile)); // Use whatever file you need here IRequestTarget t = new ResourceStreamRequestTarget(stream){ @Override public String getFileName() { return "filename.zip"; } } getRequestCycle().setRequestTarget(t); } };

Si desea eliminar el archivo después de la descarga, puede anular IRequestTarget#respond(RequestCycle) esta manera:

@Override public void respond(RequestCycle requestCycle) { super.respond(requestCycle); // Delete the file ((FileResourceStream)getResourceStream()).getFile().delete(); }

La siguiente pregunta relacionada también podría ser útil: ¿Cómo usar Wicket''s DownloadLink con un archivo generado sobre la marcha? .

Entonces, lo que tengo es un DataView con tres columnas, una de las cuales es una columna de casilla de verificación que permite a los usuarios verificar qué archivos les gustaría descargar.

Por simplicidad (creo); Decidí comprimir los archivos en un único archivo comprimido y publicarlo después de que se haya generado.

Esto es lo que tengo hasta ahora:

Código :

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);

¿Cómo sirvo el archivo zip después de que se genera para descargar? ¿Cuáles son mis opciones? Me gustaría evitar tener que redirigirlos a una página de confirmación o una página Your download is ready .

ACTUALIZAR

Basado en la respuesta de Xavi López, agregué el siguiente código en la función de onSubmit mi 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);

Y HTTP Error 404: Not Found .