<! DOCTYPE html > < html lang = "en" > < cabeza > < meta charset = "UTF-8" > < título > Título </ título > </ cabeza > < cuerpo > < un href = "/ Día 15 / img / 1 .jpg" >图片1 </ una > < un href = "/ Día 15 / img / 2.jpg" >图片2 </ una > < = "/ Día 15 / downloadServlet? filename = 1.jpg" >图片1 </ una > < un href = "/ Día 15 / downloadServlet? filename = 2.jpg" >图片2 </ una > </ cuerpo > </ html >
empaquetar cn.itcast.web; importación javax.servlet.ServletContext; importación javax.servlet.ServletException; importación javax.servlet.ServletOutputStream; importación javax.servlet.annotation.WebServlet; importación javax.servlet.http.HttpServlet; importación javax.servlet.http.HttpServletRequest; importación javax.servlet.http.HttpServletResponse; importación java.io.FileInputStream; importación java.io.IOException; / ** * @author 旗木五五开 * @create 09/03/2020 una y cuarenta y cinco * / @WebServlet ( "/ downloadServlet" ) pública clase DownloadServlet la extiende el HttpServlet { protegida vacío doPost (la solicitud de HttpServletRequest, la respuesta HttpServletResponse) lanza ServletException, IOException { // 1. Los parámetros de la petición de adquisición, el nombre del archivo nombre de archivo de secuencia = request.getParameter ( "nombre de archivo" ); // 2. Uso byte de entrada flujos en memoria // 2,1 localizar la ruta de servidor de archivos a la ServletContext donde ServletContext = el este .getServletContext (); cadena realpath = ServletContext.getRealPath ( "/ IMG /" + filename); // asociada con el flujo de bytes 2.2 el FileInputStream FIS = nuevo nuevoEl FileInputStream (realpath); // establece la respuesta de los respectivos cabezales @ adquiere archivo real de acuerdo nombre de archivo de tipo MIME cadena mimeType = servletContext.getMimeType (filename); // establecer el tipo de cabecera de respuesta MIME: Content-type response.setHeader ( " escriba-Content "mimeType); // set para abrir en respuesta a la primera forma de realización: Content-Disposition / * archivo adjunto anexo * nombre de archivo correspondiente a la descarga aviso del nombre caja * * / response.setHeader ( " Content-Disposition "" unión; nombre de archivo = "+ nombre de fichero); // escribir los datos en el flujo de entrada 3. la secuencia de salida: las operaciones de archivo Duikao // flujo de salida 3.1 archivo ServletOutputStream sos =response.getOutputStream (); // 3.2 define una matriz de bytes, como un tampón de byte [] = de BUFF nuevo nuevo byte [1024 * 8. ]; // 3,3 el número de lectura int len = 0 ; // 3,4 ciclo de lectura , leer en la memoria intermedia al mismo tiempo que ((len = (fis.read (piel de ante)))! = -1) { // no es igual a -1 descripción del archivo se ha leído hasta el final // 3,5 usando el flujo de salida, la salida de los datos de lectura sos.write (piel de ante, 0, len); // flujo de bytes sin actualizar } // flujo de salida sin autorización, el flujo de entrada de cierre fis.close (); } protegido vacío doGet (HttpServletRequest la solicitud, la respuesta HttpServletResponse)lanza ServletException, IOException { este .doPost (petición y respuesta); } }
cuestión del nombre chino
get problema de la basura china en la solicitud de petición de obtención Tomcat8 se procesará automáticamente
<! DOCTYPE html > < html lang = "en" > < cabeza > < meta charset = "UTF-8" > < título > Título </ título > </ cabeza > < cuerpo > < un href = "/ Día 15 / img / 1 .jpg" >图片1 </ una > < un href = "/ Día 15 / img / 2.jpg" >图片2 </ una > < = "/ Día 15 / downloadServlet? filename =九尾.jpg" >图片1 </ una > < un href = "/ Día 15 / downloadServlet? filename = 2.jpg" >图片2 </ una > </ cuerpo > </ html >
Firefox
360
cuadro de mensaje pop-up no muestra la china normal, no es la misma en diferentes navegadores
resolver