template plantillas gratis define jsf file-upload save

plantillas - Cómo guardar el archivo cargado en JSF



ui include (1)

El método getInputStream() del archivo cargado representa el contenido del archivo.

InputStream input = uploadedFile.getInputStream();

Necesita copiarlo a un archivo. Primero debe preparar una carpeta en el sistema de archivos del disco local donde se deben almacenar los archivos cargados. Por ejemplo, /path/to/uploads (en Windows, que estaría en el mismo disco donde se ejecuta el servidor). Tenga en cuenta que no debe almacenar los archivos en la carpeta expandida WAR utilizando una ruta relativa o getRealPath() por los motivos mencionados aquí. La imagen subida solo está disponible después de actualizar la página .

Entonces, necesitas autogenerar el nombre del archivo. De lo contrario, cuando alguien más cargue un archivo con el mismo nombre más tarde, se sobrescribirá. Puede usar la instalación Files#createTempFile() para obtener un nombre de archivo Files#createTempFile() .

Path folder = Paths.get("/path/to/uploads"); String filename = FilenameUtils.getBaseName(uploadedFile.getName()); String extension = FilenameUtils.getExtension(uploadedFile.getName()); Path file = Files.createTempFile(folder, filename + "-", "." + extension);

La ruta de carga podría, si es necesario, parametrizarse en función de una de las diversas maneras que se muestran en esta sección de Preguntas y respuestas: Método recomendado para guardar los archivos cargados en una aplicación de servlet . FilenameUtils es parte de Apache Commons IO que ya debes tener en tu classpath ya que es una dependencia del componente de carga de archivos Tomahawk.

Finalmente, solo transmita el archivo cargado a ese archivo (suponiendo Java 7):

try (InputStream input = uploadedFile.getInputStream()) { Files.copy(input, file, StandardCopyOption.REPLACE_EXISTING); } System.out.println("Uploaded file successfully saved in " + file);

Luego, para volver a descargarlo, lo más fácil sería registrar /path/to/uploads como un nuevo contexto de aplicación web o un host virtual para que todos esos archivos estén disponibles en una URL. Consulte también Cargar imágenes desde fuera de la carpeta webapps / webcontext / deploy con la etiqueta <h: graphicImage> o <img> .

Estoy cargando un archivo en JSF. Estoy utilizando Tomahawk''s <t:inputFileUpload> para esto, pero la misma pregunta es aplicable, por ejemplo, PrimeFaces <p:fileUpload> y JSF 2.2 <h:inputFile> .

Tengo el siguiente código de bean de respaldo:

private UploadedFile uploadedFile; // +getter+setter public String save() throws IOException { String name = uploadedFile.getName(); System.out.println("File name: " + name); String type = uploadedFile.getContentType(); System.out.println("File type: " + type); long size = uploadedFile.getSize(); System.out.println("File size: " + size); InputStream stream = uploadedFile.getInputStream(); byte[] buffer = new byte[(int) size]; stream.read(buffer, 0, (int) size); stream.close(); }

Puedo obtener el nombre, el tipo y el tamaño del archivo, pero no puedo guardar este archivo en una ruta específica. No puedo encontrar la manera correcta de guardar el archivo cargado. ¿Cómo puedo conseguir esto?