Directorio de artículos
Aquí se implementa una función simple de carga de imágenes, principalmente para familiarizarse con el proceso interactivo de esta carga de archivos. Con respecto a las cargas de archivos más complejas, como la carga de fragmentos de archivos grandes, la reanudación de cargas desde puntos de interrupción, etc., no presentaré demasiado aquí.
archivo de carga frontal
Primero cree una página en el front-end, aquí elegimos cargar archivos en forma de formulario. Al seleccionar, use input
el tipo en la etiqueta para file
seleccionar automáticamente el archivo local.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>上传一张图片</title>
</head>
<body>
<form action="upload" method="POST" enctype="multipart/form-data">
<input type="file" name="MyImage">
<input type="submit" value="提交图片">
</form>
</body>
</html>
Explicación del código :
- En la etiqueta del formulario,
action
la dirección URL de la carga de datos del formulario se escribe después del atributo. Si no se escribe, se cargará en la página actual de forma predeterminada. Aquí escribimos la dirección analizada por el servidor @WebServlet("/upload
" ). - En el atributo de método, lo configuramos como el método POST, es decir, el método para enviar datos de formulario, que es el método para construir solicitudes HTTP como mencionamos anteriormente, y la cantidad de datos transmitidos por POST es grande, lo que puede ser considerado como ilimitado.
- enctype="multipart/form-data", la función de este atributo es establecer el formato de codificación de datos del formulario como
multipart/form-data
tipo, este tipo de codificación procesará el contenido del archivo al cargarlo, para que el servidor pueda analizar el tipo de archivo y el contenido.
atributo enctype :
application/x-www=form-urlencoded : de forma predeterminada, solo se procesa el valor del atributo de valor en el campo de formulario, y el valor en el campo de formulario se procesa en el método deURL
codificación ;
multipart/form-data : el formulario se procesa en forma de flujo binario Datos, además del valor del atributo de valor en el campo de formulario, también procesa el contenido del archivo del campo de formulario, lo encapsula en los parámetros de solicitud y no codifica caracteres;
texto/sin formato : Convierta espacios en signos +, otros caracteres no están codificados Proceso, adecuado para enviar correo a través de formularios.
Resumen :
- La carga de archivos front-end es en realidad la transferencia de contenido y datos del archivo, no las operaciones de copia y copia de archivos que usamos comúnmente.
- En el proceso de transmisión, la medicina tradicional china se codifica para formular las reglas para la transmisión de datos, de modo que el backend pueda implementar un conjunto de reglas de análisis correspondientes para el análisis.
- La regla de datos aprobada debe contener la información básica del archivo, como el nombre y el tipo de archivo, para que el análisis de back-end pueda escribir el archivo en el formato correcto.
Backend acepta archivos
La solicitud se procesa en el lado del servidor, y los archivos de la solicitud se extraen y se guardan nuevamente, y finalmente el código se implementa en Tomcat.
Al analizar el archivo en la solicitud, getPart
se debe usar el método en Servlet. El parámetro de este método es el nombre del archivo correspondientename
Al cargar archivos en el front-end, puede seleccionar varios archivos para cargar a la vez, y cada archivo se empaquetará en un Part
objeto. Cada archivo tendrá su propio nombre de archivo, y el servidor puede encontrar el archivo correspondiente de acuerdo con el archivo. name. Part
, Part
que contiene la información del archivo correspondiente.
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
import java.io.IOException;
@MultipartConfig
@WebServlet("/upload")
public class UploadServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1.从请求对象中,读取出Part对象
Part part =req.getPart("MyImage");
//2.读取到Part 对象中的一些参数
System.out.println(part.getSubmittedFileName()); // 上传文件真实的文件名
System.out.println(part.getContentType()); // 文件的类型
System.out.println(part.getSize()); // 文件的大小
//3.把文件写入到指定的目录中
part.write("c:/temp/MyImage.jpg");
//4.返回一个响应,通知用户上传成功
resp.getWriter().write("upload OK !");
}
}
Explicación del código:
- El servlet que acepta cargas de archivos debe estar
@MultipartConfig
anotado; de lo contrario, el servlet no puede leer correctamente el contenido del archivo en la solicitud. - @WebServlet("/upload") aquí corresponde al
/upload
valor del atributo de acción en la etiqueta del formulario de front-end .upload
El atributo de acción enviará los datos en el formulario a la URL correspondiente. El front-end establece la URL para cargar, por lo que el back-end también debe corresponder al front-end al construir la URL. De lo contrario, no se puede acceder a Tomcat. - El método específico reescrito en el servlet también debe
method
corresponder al atributo de front-end. El front-end usa unPost
método, y las reescrituras de back-end en el servlet son eldoPost
método. - En el método anulado, primero necesitamos
name
obtener elPart
objeto correspondiente a través del nombre del archivo. El nombre del archivo front-end es MyImage, entonces el parámetro aquí debe ser MyImage. - Después de obtener el objeto, la información de los parámetros del archivo, como el nombre del archivo, el tipo de archivo, el tamaño del archivo, etc., se puede obtener a través de algunos métodos integrados de Servlet.
- Luego
part.write()
haga que el archivo sea persistente por método, es decir, guarde el archivo y escríbalo en el directorio especificado. El parámetro de este método es la ruta que desea guardar. - Finalmente, se puede devolver una respuesta para notificar al cliente que la carga se realizó correctamente.
Ingrese la URL en el navegador, envíe una solicitud y comience a cargar el archivo. La carga
se realizó correctamente .
En la ruta local correspondiente, puede ver el archivo cargado.