Simule la carga de un solo archivo de 2 maneras, el efecto es el siguiente
Los pasos de desarrollo son los siguientes:
1. Cree un nuevo proyecto web e importe los archivos jar necesarios para cargar los archivos de struts2, como se muestra a continuación
Estructura del directorio
2. Crear nueva acción
primera manera
Copie el código de código de la siguiente manera:
paquete com.ljq.action;
importar java.io.File;
importar org.apache.commons.io.FileUtils;
importar org.apache.struts2.ServletActionContext;
importar com.opensymphony.xwork2.ActionContext;
importar com.opensymphony.xwork2.ActionSupport;
@SuppressWarnings("serie")
la clase pública UploadAction extiende ActionSupport{
imagen de archivo privado //archivo cargado
cadena privada imageFileName //Nombre del archivo;
cadena privada imageContentType //Tipo de archivo
La ejecución de cadena pública () lanza una excepción {
Cadena realpath = ServletActionContext.getServletContext().getRealPath("/images");
//D:/apache-tomcat-6.0.18/webapps/struts2_upload/images
System.out.println("rutareal: "+rutareal);
si (imagen! = nulo) {
Archivo savefile = nuevo archivo (nuevo archivo (ruta real), imageFileName);
si (!savefile.getParentFile().existe())
savefile.getParentFile().mkdirs();
FileUtils.copyFile(imagen, archivo guardado);
ActionContext.getContext().put("mensaje", "Archivo cargado correctamente");
}
devolver "éxito";
}
archivo público getImage() {
devolver imagen;
}
setImage público vacío (imagen de archivo) {
esta.imagen = imagen;
}
cadena pública getImageFileName() {
devolver nombre de archivo de imagen;
}
public void setImageFileName(String imageFileName) {
this.imageFileName = imageFileName;
}
cadena pública getImageContentType() {
devolver tipo de contenido de imagen;
}
setImageContentType público vacío (String imageContentType) {
this.imageContentType = imagenContentType;
}
}
Segunda forma
Copie el código de código de la siguiente manera:
paquete com.ljq.action;
importar java.io.File;
importar java.io.FileInputStream;
importar java.io.FileOutputStream;
importar java.io.IOException;
importar org.apache.struts2.ServletActionContext;
importar com.opensymphony.xwork2.ActionSupport;
@SuppressWarnings("serie")
la clase pública UploadAction2 extiende ActionSupport {
//Encapsula los atributos del dominio del archivo cargado
imagen de archivo privado;
//Encapsula los atributos del tipo de archivo cargado
tipo de contenido de imagen de cadena privada;
//Encapsula los atributos del nombre del archivo cargado
nombre de archivo de imagen de cadena privada;
//Aceptar propiedades de inyección de dependencia
ruta de guardado de cadena privada;
@Anular
cadena pública ejecutar() {
FileOutputStream fos = nulo;
FileInputStream fis = nulo;
intentar {
//Crear flujo de salida de archivo
System.out.println(getSavePath());
fos = new FileOutputStream(getSavePath() + "//" + getImageFileName());
//Crear una secuencia de carga de archivos
fis = nuevo FileInputStream(getImage());
byte[] buffer = nuevo byte[1024];
int longitud = 0;
mientras ((len = fis.read(búfer)) > 0) {
fos.write(búfer, 0, len);
}
} captura (Excepción e) {
System.out.println("Error al cargar el archivo");
e.printStackTrace();
} finalmente {
cerrar(fos, fis);
}
devolver ÉXITO;
}
/**
* Regresar a la ubicación para guardar el archivo cargado
*
* @devolver
*/
cadena pública getSavePath() lanza una excepción{
devolver ServletActionContext.getServletContext().getRealPath(savePath);
}
setSavePath público vacío (String savePath) {
this.savePath = savePath;
}
archivo público getImage() {
devolver imagen;
}
setImage público vacío (imagen de archivo) {
esta.imagen = imagen;
}
cadena pública getImageContentType() {
devolver tipo de contenido de imagen;
}
setImageContentType público vacío (String imageContentType) {
this.imageContentType = imagenContentType;
}
cadena pública getImageFileName() {
devolver nombre de archivo de imagen;
}
public void setImageFileName(String imageFileName) {
this.imageFileName = imageFileName;
}
cierre de vacío privado (FileOutputStream fos, FileInputStream fis) {
si (fis! = nulo) {
intentar {
fis.cerrar();
} captura (IOException e) {
System.out.println("FileInputStream no pudo cerrarse");
e.printStackTrace();
}
}
si (fos != nulo) {
intentar {
fos.cerrar();
} captura (IOException e) {
System.out.println("FileOutputStream no pudo cerrarse");
e.printStackTrace();
}
}
}
}
Archivo de configuración struts.xml
Copie el código de código de la siguiente manera:
<?xml versión="1.0" codificación="UTF-8" ?>
<!DOCTYPE puntales PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//ES"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<puntales>
<!-- Este atributo especifica el sufijo de solicitud que debe ser procesado por Struts2. El valor predeterminado de este atributo es acción, es decir, todas las solicitudes que coinciden con *.action son procesadas por Struts2.
Si el usuario necesita especificar varios sufijos de solicitud, sepárelos con comas (,). -->
<nombre constante="struts.action.extension" valor="hacer" />
<!-- Establezca si el navegador almacena en caché el contenido estático. El valor predeterminado es verdadero (se utiliza en el entorno de producción. Es mejor desactivarlo durante la etapa de desarrollo).
<constante nombre="struts.serve.static.browserCache" valor="false" />
<!-- Cuando se modifica el archivo de configuración de struts, si el sistema recargará automáticamente el archivo, el valor predeterminado es falso (usado en el entorno de producción), es mejor activarlo durante la etapa de desarrollo -->
<nombre constante="struts.configuration.xml.reload" valor="true" />
<!-- Se utiliza en modo de desarrollo, para que se puedan imprimir mensajes de error más detallados -->
<nombre constante="struts.devMode" valor="true" />
<!--Tema de vista predeterminado-->
<nombre constante="struts.ui.theme" valor="simple" />
<!--<nombre constante="struts.objectFactory" valor="primavera" />-->
<!--Solución a códigos confusos-->
<nombre constante="struts.i18n.encoding" valor="UTF-8" />
<!-- Especifique el número máximo de bytes permitidos para los archivos cargados. El valor predeterminado es 2097152(2M) -->
<nombre constante="struts.multipart.maxSize" valor="10701096"/>
<!-- Configure la carpeta temporal para los archivos cargados, javax.servlet.context.tempdir se usa de forma predeterminada -->
<constante nombre="struts.multipart.saveDir " valor="d:/tmp" />
<nombre del paquete="upload" namespace="/upload" extends="struts-default">
<nombre de acción="*_upload" método="{1}">
<resultado nombre="éxito">/WEB-INF/page/message.jsp</result>
</acción>
</paquete>
<nombre del paquete="upload2" extends="struts-default">
<nombre de acción="subir2" método="ejecutar">
<!-- Establece dinámicamente el valor del atributo de savePath -->
<param nombre="savePath">/imagenes</param>
<resultado nombre="éxito">/WEB-INF/page/message.jsp</result>
<resultado nombre="input">/upload/upload.jsp</result>
<nombre-ref-interceptor="cargararchivo">
<!-- Filtrado de archivos -->
<param name="allowedTypes">imagen/bmp,imagen/png,imagen/gif,imagen/jpeg</param>
<!-- Tamaño del archivo, en bytes -->
<param nombre="maximumSize">1025956</param>
</interceptor-ref>
<!-- El interceptor predeterminado debe colocarse después de fileUpload; de lo contrario, no será válido -->
<interceptor-ref nombre="defaultStack" />
</acción>
</paquete>
</struts>
Subir página de formulario
Copie el código de código de la siguiente manera:
<%@ idioma de página="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transicional//ES">
<html>
<cabeza>
<título>Carga de archivos</título>
<meta http-equiv="pragma" content="sin-cache">
<meta http-equiv="control-cache" contenido="sin-cache">
<meta http-equiv="caduca" contenido="0">
</cabeza>
<cuerpo>
<!-- ${pageContext.request.contextPath}/upload/execute_upload.do -->
<!-- ${pageContext.request.contextPath}/upload2/upload2.do -->
<formulario acción="${pageContext.request.contextPath}/upload2/upload2.do"
enctype="multipart/form-data" método="publicación">
Archivo:<tipo de entrada="archivo" nombre="imagen">
<tipo de entrada="enviar" valor="Subir" />
</formulario>
<br/>
<s:error de campo/>
</cuerpo>
</html>
Mostrar página de resultados
Copie el código de código de la siguiente manera:
<%@ idioma de página="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transicional//ES">
<html>
<cabeza>
<title>Subida exitosa</title>
<meta http-equiv="pragma" content="sin-cache">
<meta http-equiv="control-cache" contenido="sin-cache">
<meta http-equiv="caduca" contenido="0">
</cabeza>
<cuerpo>
¡Subida exitosa!
<br/>><br/>
<!-- ${pageContext.request.contextPath} ruta de implementación de Tomcat,
Por ejemplo: D:/apache-tomcat-6.0.18/webapps/struts2_upload/ -->
<img src="${pageContext.request.contextPath}/<s:property value="'images/'+imageFileName"/>">
<s:depuración></s:depuración>
</cuerpo>
</html>