@RequestMapping("/eliminar/{idArchivo}")
 public ModelAndView eliminarArchivo(@PathVariable BigDecimal idArchivo) {
   Archivo arch = genericDAO.get(Archivo.class, idArchivo);
   ModelAndView mav = new ModelAndView("redirect:/app/archivo/" + arch.getIdArchivo());
   genericDAO.delete(Archivo.class, idArchivo);
   return mav;
 }
  @RequestMapping("/abrir/{idArchivo}")
  public void abrirArchivo(@PathVariable BigDecimal idArchivo, HttpServletResponse response)
      throws IOException {

    Archivo archivo = genericDAO.get(Archivo.class, idArchivo);
    byte[] fichero = archivo.getArchivo();

    response.setHeader("Content-type", archivo.getMime());
    response.setHeader(
        "Content-Disposition", "attachment; filename=\"archivo." + archivo.getExtension() + "\"");

    PrintStream pout = new PrintStream(response.getOutputStream());
    pout.write(fichero);
  }
  @RequestMapping("/subir/{idESDocumento}")
  public ModelAndView subir(
      @PathVariable BigDecimal idESDocumento,
      @SessionParam Usuario usuario,
      Archivo archivo,
      @RequestParam MultipartFile file)
      throws IOException {

    String url = "redirect:/app/archivo/" + idESDocumento;
    ModelAndView mav = new ModelAndView(url);
    if (file != null && !file.isEmpty()) {
      archivo.setMime(file.getContentType());
      Fichero fich = new Fichero(file.getOriginalFilename());
      archivo.setNombre(fich.getNameWithoutExtension());
      archivo.setExtension(fich.getExtension());
      archivo.setArchivo(file.getBytes());
      archivo.setCreacion(new Date(), usuario);
      archivo.setIdArchivo(idESDocumento);
      genericDAO.insertOrUpdateWithBlob(Archivo.class, archivo);
    }
    return mav;
  }