Cet article vous présente l'objet SrvletContext et le code d'implémentation pour le téléchargement de fichiers. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il vous sera utile.
Cycle de vie (il ressort du cycle de vie qu'il s'agit d'un objet global)
Créé au démarrage du projet
Détruit à la fermeture du projet
Concept : Représente l'intégralité de l'application web et peut communiquer avec le conteneur (serveur) du programme.
Obtenir
1. Obtenir via l'objet de requête : request.getServletContext();
2. Obtenir via HttpServlet : this.getServletContext();
Fonction
Fichier sous web : getRealPath("/filename");
Sous web/WEB-INF : getRealPath("/WEB-INF/filename");
Sous src : getRealPath("/WEB-INF/classes/file name");
setAttribute(String name,Object obj)
getAttribute(String name)
removeAttribute (Nom de la chaîne)
Type MIME : Un type de données de fichier défini dans le processus de communication Internet
String getMimeType(String file) : Détermine le fichier en fonction de son nom de suffixe Le type
le format est : gros type/petit type
Obtenir le type MIME (type de fichier)
Objet de domaine (partage de données de tous les utilisateurs)
Obtenir le chemin réel (serveur) du fichier
Il existe un moyen d'implémenter le téléchargement de fichiers Là est un problème avec les caractères chinois tronqués, alors commençons par une classe d'outils
package cn.itcast.utils; import sun.misc.BASE64Encoder; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; public class DownLoadUtils { public static String getFileName(String agent, String filename) throws UnsupportedEncodingException { if (agent.contains("MSIE")) { // IE浏览器 filename = URLEncoder.encode(filename, "utf-8"); filename = filename.replace("+", " "); } else if (agent.contains("Firefox")) { // 火狐浏览器 BASE64Encoder base64Encoder = new BASE64Encoder(); filename = "=?utf-8?B?" + base64Encoder.encode(filename.getBytes("utf-8")) + "?="; } else { // 其它浏览器 filename = URLEncoder.encode(filename, "utf-8"); } return filename; } }
puis l'implémentation de la classe servlet :
@WebServlet(name = "DownloadServlet",urlPatterns = "/download3") public class DownloadServlet extends HttpServlet { @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request,response); } @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 1.获取文件名 String filename = request.getParameter("filename"); // 2.获取真实路径 // 2.1 获取ServletContext ServletContext servletContext = this.getServletContext(); // 2.2 根据文件存储的位置,选择路径,本人的路径是web下的upload下的文件 String realPath = servletContext.getRealPath("/upload/" + filename); // 3.设置响应头 // 3.1 设置content-type response.setHeader("content-type",servletContext.getMimeType(filename)); // 3.2 解决中文乱码 String agent = request.getHeader("user-agent"); filename = DownLoadUtils.getFileName(agent,filename); // 3.3 设置content-disposition response.setHeader("content-disposition","attachment;filename=" + filename); // 4.标准的IO流 FileInputStream fis = new FileInputStream(realPath); ServletOutputStream sos = response.getOutputStream(); byte[] b = new byte[1024 * 8]; int len = 0; while((len = fis.read(b)) != -1){ sos.write(b,0,len); } fis.close(); sos.close(); } }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!