java实现下载 设置响应头的mimetype类型问题

刚学到如何实现下载 课件上写要设置两个响应头 其中一个是

ServletContext sc = getServletContext();
String mimeType = sc.getMimeType(filename);
response.setContentType(mimeType);

目的是为了告诉浏览器文件类型
但是当我尝试这么做的时候会出现这个警告
图片说明

并且将这段代码注释掉依然能以正常的格式下载,并且警告也没有了

response.setContentType(mimeType);

请问下为什么会出现这两种情况
以下为完整代码 idea tomcat8 jdk8 chrome

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.URLEncoder;

@WebServlet("/downloadServlet")
public class DownloadServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        response.setContentType("text/html;charset=utf-8");
        String filename = request.getParameter("filename");
        ServletContext sc = getServletContext();
        String mimeType = sc.getMimeType(filename);
        String realPath = sc.getRealPath("/WEB-INF/" + filename);


        File f = new File(realPath);

        if(f.exists()){
            response.setHeader("content-disposition","attachment;filename="+ URLEncoder.encode(filename,"utf-8"));
            response.setContentType(mimeType);
            FileInputStream fis = new FileInputStream(f);
            ServletOutputStream os = response.getOutputStream();
            byte[] b = new byte[1024 * 8];
            int len;
            while ((len=fis.read(b))!=-1){
                os.write(b,0,len);
            }
            os.close();
            fis.close();
        }

    }
}

2个回答

目前的一些浏览器已经支持不写也能正常下载,不过最好写下

把这一行注释掉:response.setContentType("text/html;charset=utf-8");
这一行的意思是你设置了响应内容的类型是文本,而实际响应的却是文件,所以浏览器会出这个警告。

qq_35795408
Nuit__ 之前就是没有这行 依然会警告 不设置的话应该默认也是text/html类型
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐