Maison  >  Article  >  Java  >  Introduction à l'objet SrvletContext et au code d'implémentation pour le téléchargement de fichiers

Introduction à l'objet SrvletContext et au code d'implémentation pour le téléchargement de fichiers

不言
不言original
2018-09-27 14:30:442522parcourir

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.

Objet ServletContext

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

    1. Obtenir le type MIME (type de fichier)

    2. Objet de domaine (partage de données de tous les utilisateurs)

    3. 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!

    Déclaration:
    Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn