tutorial subir que imagenes guardar fileupload espaƱol con como archivos archivo adjuntar jsf file-upload file-io jsf-2.2

subir - que es jsf



Escriba el archivo en el disco usando JSF 2.2 inputFile (1)

Se supone que la anotación @javax.servlet.annotation.MultipartConfig se coloca en la clase que implementa HttpServlet , no en una clase de bean de respaldo. Básicamente, esa anotación debe colocarse en la clase FacesServlet , que ya está hecha desde JSF 2.2.

En otras palabras, la anotación @MultipartConfig en su clase de bean de respaldo se ignora y no tiene ningún efecto, y el archivo en realidad no se guarda en la location que especificó en la anotación. En cambio, se ha guardado en una ruta relativa al llamado directorio de trabajo actual , que es básicamente la "carpeta actualmente abierta" en el momento en que se ejecuta java.exe . En el caso de las aplicaciones web de Java que suele ser la carpeta binaria del servidor o más. Puede rastrearlo de la siguiente manera:

System.out.println(new File(".").getAbsolutePath());

Verás tu archivo cargado allí.

Además, incluso si la anotación @MultipartConfig funcionó, el atributo de location realmente no representa la ubicación de almacenamiento de carga permanente del archivo. En cambio, representa la ubicación de almacenamiento de disco temporal para el caso cuando el tamaño del archivo cargado excede el espacio de memoria disponible / configurado. Nunca debe almacenar archivos cargados permanentemente en la ubicación identificada por @MultipartConfig(location) . Siempre debe obtener el contenido del archivo a través de la Part#getInputStream() y escribirlo en la ubicación permanente deseada provista por un nuevo File o Path represente una ruta absoluta.

Deshazte de esa anotación completa de @MultipartConfig . No está haciendo nada útil en una clase de bean de respaldo. Simplemente obtenga el contenido del archivo por la Part#getInputStream() y cópielo en la ruta absoluta deseada:

try (InputStream input = imagemCarregada.getInputStream()) { Files.copy(input, new File("/home/rogerio/tmp/teste.jpg").toPath()); }

Ver también

Sin relación con el problema concreto, el uso de una sesión de frijol con este propósito no es ideal. Más bien use una vista o solicite una con alcance. Consulte también ¿Cómo elegir el alcance del frijol correcto? Y, el uso de prependId="false" no se recomienda para otros fines que los formularios de inicio de sesión vinculados a un marco de inicio de sesión que no es compatible con la identificación JSF antepuesta en los nombres de los parámetros de solicitud. Ver también UIForm con prependId = "false" breaks <f: ajax render> .

Intento subir un archivo de imagen usando la etiqueta h: inputFile y escribirlo en el disco.

Mi código JSF:

<h:form id="fileUploadForm" enctype=''multipart/form-data'' prependId="false"> <h:inputFile value="#{solicitacaoManagedBean.imagemCarregada}" /> <br /> <h:commandButton styleClass="btn btn-primary " value="Enviar" action="#{solicitacaoManagedBean.enviarImagem}" /> </h:form>

Mi ManagedBean:

@Named(value = "solicitacaoManagedBean") @SessionScoped @MultipartConfig(location = "/home/rogerio/tmp/") public class SolicitacaoManagedBean implements Serializable { private Part imagemCarregada;

(...)

public void enviarImagem() throws IOException { try { imagemCarregada.write("teste.jpg"); } catch (IOException ioe) { System.out.println("Erro ao escrever: " + ioe.getLocalizedMessage()); } } }

Supuestamente, el método escribe el elemento de carga en el disco y la IOException tampoco se lanza / atrapa.