케이스 (웹 개발) : 다운로드

파일 다운로드

클라이언트 브라우저는 서버에서 파일을 다운로드합니다. 사실, 하이퍼 링크 주소는 서버 측 파일 경로에 연결되어있는
등 사진, 비디오, 오디오, PDF, TXT 등의 파일을 식별 할 수있는 브라우저가 직접 열립니다 : 문제가있다.
해결 방법 : 브라우저가 열려 있도록 브라우저가 첨부 파일 직접 다운로드를 열 수없는 무엇에 관계없이 파일의 시간 유형, 브라우저에 지시 서버 측 코드를 작성합니다.

다음 코드는 머리에 대한 응답으로 설정되어 안내 서버 브라우저, 첨부 파일을 다운로드

                           内容描述            附件
 response.setHeader("Content-Disposition","attachment;filename=文件名");

코드 구현 :

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <!--
        超链接:文件下载
        连接的路径就是服务器文件的地址
    -->
    <a href="/web03/download/a.flv">a.flv</a><br/>
    <a href="/web03/download/a.jpg">a.jpg</a><br/>
    <a href="/web03/download/a.mp3">a.mp3</a><br/>
    <a href="/web03/download/a.mp4">a.mp4</a><br/>
    <a href="/web03/download/a.txt">a.txt</a><br/>
    <a href="/web03/download/a.zip">a.zip</a><br/>
    <a href="/web03/download/a.pdf">a.pdf</a><br/>
    <hr/>
    <!--
        连接的地址,不在是文件的地址,连接某一个Servlet
    -->
    <a href="/web03/download">a.jpg</a><br/>

    <!--
        http://localhost:8080/web03/download.html?a=%E4%BD%A0%E5%A5%BD#
    -->
    <form action="#" method="get">
        <input type="text" name="a"/><input type="submit"/>
    </form>
</body>
</html>
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    /*
     * 编写程序,通知浏览器请你下载,不要打开
     * 指导浏览器干什么,响应头
     * 浏览器下载是HTTP协议规定
     */

    String agent = request.getHeader("User-Agent");
    String filename="美女.jpg";
    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");
    }
    //Content-Disposition 内容描述		 	 attachment 附件
    response.setHeader("Content-Disposition","attachment;filename="+filename);
    String aFile = getServletContext().getRealPath("download/a.jpg");
    FileInputStream fis = new FileInputStream(aFile);
    OutputStream out = response.getOutputStream();
    int len = 0;
    byte[] bytes = new byte[1024];
    while ((len = fis.read(bytes))!=-1){
        out.write(bytes,0,len);
    }
    fis.close();
}

추천

출처blog.csdn.net/qq_45083975/article/details/92627481