Ejemplo de carga de archivos asincrónicos de jQuery Uploadify + Apache Fileupload
1. Puede limitar el tamaño y el tipo de archivos cargados. En teoría, se puede cargar cualquier tipo de archivo (puede configurarlo según la API);
2. Apache commons-fileupload-1.3.1.jar se utiliza como kit de herramientas de carga en segundo plano. Este ejemplo admite la carga de múltiples archivos a la vez;
3. El directorio de carga de archivos se puede especificar arbitrariamente; configúrelo en web.xml;
Para obtener detalles sobre la API de Uploadify, consulte http://www.uploadify.com/documentation/
Servlet de carga de archivos
Copie el código de código de la siguiente manera:
paquete com.xiaoxing.upload;
importar java.io.File;
importar java.io.IOException;
importar java.io.PrintWriter;
importar java.io.UnsupportedEncodingException;
importar java.text.SimpleDateFormat;
importar java.util.Fecha;
importar java.util.Iterator;
importar java.util.List;
importar java.util.UUID;
importar javax.servlet.ServletException;
importar javax.servlet.http.HttpServlet;
importar javax.servlet.http.HttpServletRequest;
importar javax.servlet.http.HttpServletResponse;
importar org.apache.commons.fileupload.FileItem;
importar org.apache.commons.fileupload.disk.DiskFileItemFactory;
importar org.apache.commons.fileupload.servlet.ServletFileUpload;
/**
* <h1>Subida de archivos Apache Fileupload (2014-5-3)</h1>
* <p>1. Si está interesado en este ejemplo y desea saber más, bienvenido a unirse a la comunidad de aprendizaje en línea de Java Private School (329232140)</p>.
* <p>2. Este ejemplo se puede trasplantar a su proyecto real con modificaciones menores. </p>
*/
la clase pública FileUploadServlet extiende HttpServlet {
serialVersionUID largo final estático privado = 7579265950932321867L;
//Establece el directorio de carga de archivos predeterminado (si no lo has configurado en web.xml)
private String uploadDir = "c:/" //Directorio de carga de archivos
private String tempUploadDir = "c:/"; // El directorio donde se almacenan temporalmente los archivos (el oyente los elimina automáticamente después de que se destruye la sesión)
/*
* (no Javadoc)
* @ver javax.servlet.GenericServlet#init()
* Si el directorio de carga de archivos está configurado en web.xml, se usará primero para determinar si el directorio de archivos existe. Si no existe, créelo.
*/
@Anular
public void init() lanza ServletException {
// Obtener el directorio real del disco duro donde se encuentra este proyecto
Ruta de cadena = getClass().getProtectionDomain().getCodeSource().getLocation().getPath();
ruta = ruta.substring(0, ruta.indexOf("WEB-INF"));
// Determinar si el objetivo existe, crearlo si no existe
Cadena uploadDir = path.concat(this.getInitParameter("uploadDir"));
String tempUploadDir = path.concat(this.getInitParameter("tempUploadDir"));
Archivo f_uploadDir = nuevo archivo(uploadDir);
Archivo f_tempUploadDir = nuevo archivo (tempUploadDir);
si (!f_uploadDir.exists()) {
f_uploadDir.mkdirs();
}
si (!f_tempUploadDir.exists()) {
f_tempUploadDir.mkdirs();
}
//Asignar valor a la variable
this.uploadDir = subirDir;
this.tempUploadDir = tempUploadDir;
}
/*
* (no Javadoc)
* @ver javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
* No acepte datos enviados mediante el método de obtención y devuelva el código de estado de error de carga.
*/
@Anular
doGet vacío protegido (solicitud HttpServletRequest, respuesta HttpServletResponse) lanza ServletException, IOException {
this.setResponse(respuesta);
PrintWriter fuera = respuesta.getWriter();
out.print("{/"error/":/"-1/""); // Método de envío ilegal
}
/*
* (no Javadoc)
* @ver javax.servlet.http.HttpServlet#doPost(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
* Las solicitudes de carga de archivos generalmente se envían mediante POST
*/
@Anular
protected void doPost (solicitud HttpServletRequest, respuesta HttpServletResponse) lanza ServletException, IOException {
this.setResponse(response); //Establece el tipo de respuesta para el análisis front-end
PrintWriter fuera = respuesta.getWriter();
Resultado de cadena = "";
intentar {
// Comprobar si se trata de una solicitud de carga de archivo
booleano isMultipart = ServletFileUpload.isMultipartContent(solicitud);
si (esMultiparte) {
DiskFileItemFactory factory = new DiskFileItemFactory() // Crea un elemento de archivo basado en disco de fábrica
factory.setRepository(new File(tempUploadDir)); // Configurar el repositorio (al garantizar una ubicación temporal segura)
ServletFileUpload upload = new ServletFileUpload(factory); // Crea un nuevo controlador de carga de archivos
upload.setSizeMax(1024 * 1024 * 100); // Establece el límite de tamaño general requerido (se recomienda configurar el front-end y el backend por separado, porque se utilizan diferentes complementos en el front-end y el backend)
List<FileItem> items = upload.parseRequest(solicitud); // Analiza la solicitud;
Iterator<FileItem> iter = items.iterator(); // Procesar elementos cargados
while (iter.hasNext()) { //Si se cargan varios archivos a la vez, se guardarán por separado aquí.
elemento FileItem = iter.next();
if (!item.isFormField()) { // Filtrar campos que no sean de tipo archivo en el formulario
if (!"".equals(item.getName())) { // Filtrar entrada de tipo que no es archivo
String s_name = item.getName(); // Obtener el nombre del archivo original.
int posición = s_name.lastIndexOf(".");
String s_fileType = s_name.substring(position, s_name.length()); // Obtener el sufijo del archivo
Fecha de cadena = new SimpleDateFormat("yyyyMMdd").format(new Date());
Cadena s = uploadDir.concat("/").concat(fecha).concat("/");
//Guardar archivos en directorios por fecha aquí
Archivo sf = nuevo archivo(s);
si (!sf.existe()) {
sf.mkdirs();
}
Cadena s_filePath = s.concat(UUID.randomUUID().toString()).concat(s_fileType);
Ruta del archivo = nuevo archivo (s_filePath);
elemento.write(ruta);
resultado += s_filePath.concat(",");
} demás {
resultado = "";
romper;
}
}
}
} demás {
resultado = "";
}
String s_resultJSON = this.jointJSON(resultado); // El empalme devuelve JSON frontal
out.print(s_resultJSON);
} captura (Excepción e) {
e.printStackTrace();
} finalmente {
salida.flush();
fuera.cerrar();
}
}
/**
* Empalme JSON y devuelva el nombre del archivo y el directorio de fecha del archivo guardado al front-end (el front-end puede necesitar esta ruta para completar otras operaciones del formulario, como almacenar la ruta del archivo a la base de datos)
* @param resultado cadena en formato JSON
* @devolver
* @throws Excepción de codificación no compatible
*/
cadena privada jointJSON (resultado de cadena) lanza UnsupportedEncodingException {
Cadena cadena = "";
si(!"".equals(resultado)) {
Cadena rs[] = resultado.split(",");
Búfer StringBuffer = new StringBuffer("{/"filas/":[");
para (int i = 0; i < rs.length; i++) {
Cadena s_tmpName = rs[i];
s_tmpName = s_tmpName.substring(uploadDir.length(), s_tmpName.length());
buffer.append("{/"nombre/":/"").append(s_tmpName).append("/"},");
}
str = buffer.toString();
str = str.substring(0, str.length() - 1).concat("]}");
} demás {
str = "{/"error/":/"-2/"" //La carga falló
}
devolver cadena;
}
/**
* Establezca el tipo de respuesta ContentType en "application/x-json"
* @param respuesta
*/
setResponse vacío privado (respuesta HttpServletResponse) {
respuesta.setCharacterEncoding("UTF-8");
respuesta.setContentType("aplicación/json;charset=UTF-8");
respuesta.setHeader("control de caché", "sin caché");
}
}
prueba_upload.html
Copie el código de código de la siguiente manera:
<!DOCTYPE html>
<html>
<cabeza>
<meta juego de caracteres="UTF-8">
<title>Ejemplo de carga de archivos asincrónicos de jQuery Uploadify + Apache Fileupload (2014-5-3)</title>
<enlace rel="hoja de estilo" tipo="texto/css" href="/js/uploadify/uploadify.css">
<script src="/js/jquery-1.9.0.js"></script>
<script src="/js/uploadify/jquery.uploadify.min.js"></script>
<tipo de script="texto/javascript">
$(función() {
$('#fileupload').subirify({
'método': 'publicación',
'buttonText': 'archivo de carga flash',
'límite de tamaño de archivo': '1024 KB',
'fileTypeExts': '*.gif; *.jpg *.png',
'swf' : '/js/uploadify/uploadify.swf',
'uploader' : '/upload', //Esta es la ruta para cargar imágenes, que es el servlet que configuré en web.xml
'onUploadSuccess' : function(file, data, respuesta) { //Los datos devueltos después de que la imagen se cargue correctamente se procesan aquí
var aria = eval("(" + datos + ")").filas;
for(var i = 0; i < ary.length; i++) {
$("#J_div").append("<img alt='image' src='/upload/images" + ary[i].name + "' width='200px' height='200px'>");
}
}
});
});
</script>
</cabeza>
<cuerpo>
<h2>Ejemplo de carga de archivos asincrónicos de jQuery Uploadify + Apache Fileupload (3 de mayo de 2014)</h2>
<p>1. Puedes limitar el tamaño y el tipo de archivos cargados. En teoría, se puede cargar cualquier tipo de archivo (puedes configurarlo según la API);</p>
<p>2. Apache commons-fileupload-1.3.1.jar se utiliza como kit de herramientas de carga en segundo plano. Este ejemplo admite la carga de múltiples archivos a la vez;</p>
<p>3. El directorio de carga de archivos se puede especificar arbitrariamente, configúrelo en web.xml;</p>
<p>4. Las imágenes cargadas no se encuentran en esta página. Esta parte queda a tu cargo. </p>
<p>Para obtener detalles sobre la API de Uploadify, consulte http://www.uploadify.com/documentation/</p>
<p style="color: red">*Si está interesado en este ejemplo y desea saber más, bienvenido a unirse a la comunidad de aprendizaje en línea de Java Private School (329232140). </p>
<input id="carga de archivo" tipo="archivo" nombre="img" múltiple="múltiple"/>
<div id="J_div"></div>
</cuerpo>
</html>
web.xml
Copie el código de código de la siguiente manera:
<?xml versión="1.0" codificación="UTF-8"?>
<aplicación web xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http ://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" metadata-complete="true" versión="3.0">
<lista-de-archivos-de-bienvenida>
<archivo-de-bienvenida>test_upload.html</archivo-de-bienvenida>
</lista-de-archivos-de-bienvenida>
<servlet>
<description>Un servlet diseñado específicamente para manejar operaciones de carga</description>
<servlet-name>FileUploadServlet</servlet-name>
<servlet-class>com.xiaoxing.upload.FileUploadServlet</servlet-class>
<parámetro-inicio>
<description>El directorio oficial donde se almacenan los archivos, puedes configurarlo tú mismo</description>
<param-name>subirDir</param-name>
<valor-param>/cargar/imagenes/</valor-param>
</init-param>
<parámetro-inicio>
<descripción>El directorio temporal donde se almacenan los archivos lo puede configurar usted mismo. El oyente configurado a continuación eliminará automáticamente los archivos que contiene. </descripción>
<param-name>tempUploadDir</param-name>
<valor-param>/cargar/temp</valor-param>
</init-param>
</servlet>
<mapeo-servlet>
<servlet-name>FileUploadServlet</servlet-name>
<url-pattern>/subir</url-pattern>
</servlet-mapping>
<oyente>
<description>Limpieza de recursos de archivos temporales, el kit de herramientas viene con él, no necesitamos escribirlo</description>
<listener-class>org.apache.commons.fileupload.servlet.FileCleanerCleanup</listener-class>
</escucha>
</aplicación web>