java - fileupload - struts 2 carga de archivos sin etiquetas de puntales
fileupload interceptor struts2 (2)
¿Debo utilizar las etiquetas de puntales?
<s:form action="doUpload" method="post" enctype="multipart/form-data">
<s:file name="upload" label="File"/>
<s:submit/>
</s:form>
para hacer uso de la funcionalidad de carga de archivos que proporciona struts 2? ¿Puedo lograr la misma funcionalidad sin los puntales 2 etiquetas? En caso afirmativo, ¿puedo saber que las convenciones deben incorporarse en acción o en archivos de configuración para lograr lo mismo?
En breve, sí, puedes. Entonces la configuración y las convenciones utilizadas por la acción siguen siendo las mismas.
Si usa la etiqueta <form
, debe colocar el valor del atributo de acción con la ruta que se asigna a la acción. ActionMapping
más información acerca de cómo funciona el asignador de acción y traduce la ruta al ActionMapping
aquí .
En la etiqueta de formulario, debe colocar enctype="multipart/form-data"
, de modo que Struts pueda envolver la solicitud http a MultipartRequestWrapper
y analizar los datos del formulario. Luego el interceptor fileUpload
agrega parámetros al contexto de acción necesario para que el interceptor de params
inyecte las propiedades del archivo a la acción que maneja la carga.
El nombre de la etiqueta de input
debe corresponderse con el nombre de la propiedad Tipo de File
. Es utilizado por ambos interceptores arriba y finalmente el objeto se inyecta a través de OGNL.
Si necesita cargar varios archivos, debe cambiar el tipo de propiedades para poder manejar una colección de objetos. Parece que está hecho en este ejemplo .
offcorse puedes, puedes usar etiquetas HTML,
<s:form action="fileUploadAction" method="post" enctype="multipart/form-data">
<input type="file" name="userImage" id="userImage"/>
</s:form>
puede usar struts2-inceptors para hacer cosas como esta de esta manera.
<interceptors>
<interceptor name="mylogging"
class="com.alw.controller.MyLoggingInterceptor">
</interceptor>
<interceptor-stack name="loggingStack">
<interceptor-ref name="mylogging" />
<interceptor-ref name="defaultStack" />
</interceptor-stack>
</interceptors>
<action name="fileUploadAction"
class="xxx.xxx.FileUploadAction" method="filterUploadFile">
<interceptor-ref name="fileUpload">
<param name="maximumSize">2097152</param>
</interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
<result name="success">JSP_Pagesxxx.jsp</result/>
</action>
y para llevar a cabo la lógica comercial en su clase de acción lo necesita.
public class FileUploadAction extends ActionSupport implements ServletRequestAware
{
private File userImage;
private String userImageContentType;
private String userImageFileName;
public String filterUploadFile()
{
if(UserImageFileName()!=null)
{
// perform your business logic
}
}
}