En el momento en que el usuario solicite descargar el archivo lo reconstruyes como un archivo temporal en el server y luego lo borras. Esa es mi sugerencia, si te interesa aquí te pongo como puedes reconstruir tu archivo a partir de un arreglo de bytes:
Código:
byte[] arregloRecuperado = //.. aqui pones tu arreglo
File archivo = new File("ruta.zip"); // teniendo en cuenta que tu archivo es zip
if (!archivo.exists())
archivo.createNewFile();
FileOutputStream ficheroSalida = new FileOutputStream(archivo);
ficheroSalida.write(arregloRecuperado);
ficheroSalida.flush();
ficheroSalida.close();
Tienes que capturar unas cuantas excepciones.