El primero es la parte de la página web, upload_file.jsp
<%@ page idioma = "java" image = "java.util.*" PageEncoding = "UTF-8"%> <! > <Form Action = "uploadFile" método = "post" enctype = "multipart /form-data"> <!-domain de archivo-> <input type = "file" name = "fuente" /< /> type = " Enviar "Value =" cargar "> </form> </body> </html>
Para la forma de cargar el archivo, se debe configurar Metho para publicar, y CiCtype debe establecerse en multipart/formularios de forma.
En el código anterior, puede ver que este formulario se envía al archivo de carga esta acción para procesarlo.
<Action name = "uploadFile"> <resultado name = "éxito">/uploadResult.jsp </resultado> <!-FileUploading, que se puede usar para limitar el tipo y el tamaño del documento de los documentos de carga-> <Nombre de la referencia de Internet = "FileUpload"> <!-Limite el tamaño del archivo 20m, la unidad es byte-> <sem name = "maximumSize"> 20971520 </amam> </ interceptor-ref> <!-El interceptor predeterminado debe declararse .
FileUpload Interceptor se usa para configurar rutas de carga para limitar los tipos y el tamaño de los archivos.
Con respecto al tamaño del archivo, no es posible tener <param name = "maximumSize" >> debe agregarlo en la etiqueta <TRUTS>
<constant name = "struts.multipart.maxsize" value = "21000000"/>/>
Esta línea de código indica el tamaño máximo del tamaño del archivo permitido cargar los archivos en todo el proyecto, es decir, cualquier tamaño de archivo cargado en este proyecto no puede exceder los bytes de 21000000 (aproximadamente 20 m). El archivo que puede cargarse de forma predeterminada es de 2M, por lo que este también es un método que rompe las restricciones de los archivos 2M que solo pueden cargar archivos 2M.
Con respecto al tipo de archivo, si necesita limitarlo como un archivo de imagen, puede configurarlo así
<!-Configure solo la carga del archivo de imagen-> <intercepter-ref name = "fileUpload"> <posm name = "permitidoTypes"> Image/bmp, image/x-png, image/gif, image/jpeg < /< /Param> </ intercepter-ref> <interceptor-ref name = "defaultStack" /> />
El valor en la etiqueta es que el valor del archivo es el tipo MIME, y el tipo MIME del archivo común se puede encontrar en%tomcat_home%/conf/web.xml.
Si desea limitarse al archivo de Word, puede <terecor> configurado así
<!-Settling solo permite cargar el documento de Word-> <intercepter-ref name = "fileUpload"> <sem name = "permitidoTypes"> Application/MSword, Application/VND.OpenXMlFormats -Offic EdoCument.WordProcessingMl.Document </Param> < /Intercepter-Ref> <Interceptor-Ref name = "DefaultStack" />
Sin embargo, siento que esto limita el tipo de archivo, es mejor usar JavaScript para implementar restricciones en el front -end.
A continuación, escriba la carga de la carga, los atributos privados necesarios necesarios para la carga son fuente, lo cual es consistente con el atributo de nombre del dominio del archivo en upload_file.js p, es decir, el valor de la propiedad de nombre del dominio del archivo es fuente, entonces debe haber nuestro Ever. , Además, hay dos atributos privados más importantes:
String private SourceFileName;
String private SourCeContentType;
En resumen, es decir, por ejemplo, el nombre = "ABC" del dominio de campo chino en upload_file.jsp, entonces esto debe definirse en la acción
Archivo privado ABC;
ABC obtendrá automáticamente el objeto de archivo que se cargará, ABCFileName obtiene automáticamente el nombre del archivo y ABCConTetType obtiene automáticamente el tipo de archivo.
Tengo que concentrarme en cargar rutas.
Si se carga en la ruta absoluta, es bastante bueno, pero si desea cargar en la carpeta de carga en el directorio de Root Project, ¿cómo obtener la ruta completa de esta carpeta de carga?
He intentado usar
ServletactionContext.getServletContext ().
Pero regresó nulo. También utilizado
ServletactionContext.getRequest ().
Todavía regresó a Null. Pero verificar este problema en línea, muchas personas recomiendan este escrito, demostrando que puede ser factible en algunos casos, pero hay personas que vuelven a nulas como yo. Interfaz ServiceContextare. El método específico es el siguiente:
Public Class uploadaction extiende ActionSupport ImvletContextare { / ** * omitir otro código ... * / prive ServletContext Context; Void setServletContext (contexto de servletContext) {this.context = context;}}
Luego usa
String ruta = context.getRealPath ("/upload");
Obtenga el camino de la carpeta de carga. Luego ejecute la carga:
/*Sube el archivo en la carpeta de carga*/Archivo Saveful = nuevo archivo (ruta, fuenteFileName);
Personalmente recomiendo este método, porque este método parece evitar la ruta correcta cuando el proyecto está empaquetado y transferido a otros entornos.
Pegue el código completo de la carga en el back ipoadAction.java
paquete com.lidi.Action; CLASE SUPERIOR EXTENCIÓN Tipo de archivo Tipo de archivo Tipo privado Contexto de ServletContext; / Public File getSource () {return source;} public void setSource (fuente de archivo) {this.source = fuente; Cadena getSourCeContentType () {return SourCeContentType;} public voidth e (String SourCeContype) {this.SourCeContentType = SourCeContentType;} @Override public void setServletContext (ServiceTContext Content) {this .context;} string ejecutor () stating () selle {) selle {) selle {). *Obtener la ruta al archivo de carga: el directorio de la raíz del proyecto de carga*/string ruta; carpeta* / archivo saveFile = nuevo archivo (ruta, SourceFileName);
Subir resultados Página uploadResult.jsp
<%@ page lenguaje = "java" image = "java.util.*" PageEncoding = "UTF-8"%> <%@ taglib uri = "/Struts-Tags" Prefix = "S"%> <! DOCTYPE HTML> <HTML> <HEAD> <title> Resultado de carga </title> </head> <body> <p> Nombre del archivo: <s: Property Value = "SourceFileName"/> </p> <p> archivo Tipo: <S: Property value = "SourCeContentType" /> </p> <p> archivo: <a href = "cargar /<s: propiedad value =" fuentefileName " /"> <s: propiedad = "fuente Lename" /> </a> </p> </body> </html>
Lo anterior es todo el contenido de este artículo.