JAVAWEB实训O2O商城Demo(二)——图片下载(乱码、中文等解决)

在Myeclipse里面BASE64Encoder不支持头文件 ,以下大佬链接有解决方案

https://blog.csdn.net/erlian1992/article/details/79518416

package com.xiaonuolen.downlandsServlet;

import java.io.FileInputStream;
import java.io.IOException;
import java.net.URLEncoder;

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 sun.misc.BASE64Encoder;
/**
 * Servlet implementation class DownServlet
 */
@WebServlet("/DownServlet")
public class DownServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        /*************1.接受参数*************/
        String name = request.getParameter("filename");
        
        /*************2.对接收的参数进行编码处理 也许你的代码会出现乱码问题所以这边要改 我试过在jsp里面用utf-8发现没有什么问题
        //把乱码转换二进制
        byte[] bytes = name.getBytes("ISO8859-1");
        //再转换成UTF-8进行编码
        name = new String(bytes,"UTF-8");
        
        *************/
        /*************3.告诉游览器响应的文件类型*************/
        String mimeType = this.getServletContext().getMimeType(name);//获取类型
        response.setContentType(mimeType);//设置mimetype 设置类型
        
        
        /*************4.告诉游览器以附件形式下载并根据游览器进行转码*************/
        /*获取客户端信息*/
        String agent = request.getHeader("User-Agent");
        //定义一个变量记录编码后的名字
        String filenameEncoder = "";
        if(agent.contains("MSIE")) {
            //IE编码
            filenameEncoder = URLEncoder.encode(name,"utf-8");
            filenameEncoder = filenameEncoder.replace("+", " ");
        }
        else if(agent.contains("Firefox")) {
            //火狐编码 
            BASE64Encoder base64Encoder = new BASE64Encoder();
            filenameEncoder = "=?utf-8?B?" + base64Encoder.encode(name.getBytes("utf-8")) + "?=";
        }
        else {
            //游览器编码
            filenameEncoder = URLEncoder.encode(name,"utf-8");
        }
        response.setHeader("Content-Disposition", "attachment;filename="+filenameEncoder);    //告诉游览器不要去解析,以附件形式下载
        
        /*************5.响应给游览器*************/
        String path = this.getServletContext().getRealPath("down/"+name);
        FileInputStream in = new FileInputStream(path);
        byte[] buffer=new byte[1024];
        int len = 0;
        ServletOutputStream out = response.getOutputStream();
        while((len=in.read(buffer))!=-1) {
            out.write(buffer,0,len);  
            
        }
        
        
        in.close();
    
    }
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
    }

}
 

猜你喜欢

转载自blog.csdn.net/qq_40632760/article/details/85042062