解决Java下载文件,文件名包含中文在IE浏览器乱码问题

@RequestMapping("/downloadCert")
		@ResponseBody
		//下载证书
		public  void  downLoadCertSource(HttpServletRequest req,HttpServletResponse response,String certSourceId)
		{
		                        //得到要下载的文件名
			                certSourceInfo certSource=certSourceService.findCertById(certSourceId);
			                String certSourceText=certSource.getCertText();
					String certName=certSource.getCertName();
					
					String fileName=null;
					try {   
                                                
						response.setContentType("binary/octet-stream");
						req.setCharacterEncoding("UTF-8");
						fileName=URLEncoder.encode(certName,"UTF-8");
					
					} catch (UnsupportedEncodingException e1) {
						// TODO 自动生成的 catch 块
						e1.printStackTrace();
					}
                                          //解决IE和火狐浏览器不兼容,文件名有中文就乱码的问题
                                        response.setHeader("Content-Disposition", "attachment; filename*=UTF-8''" + fileName+".cer");
     	          
			        try {
			        	byte[] crlByte ;
					    InputStream inputCrl  ;	
						//进行64位的解码
						crlByte = new BASE64Decoder().decodeBuffer(certSourceText);
						inputCrl = new ByteArrayInputStream(crlByte);
			        	 //创建输出流
						ServletOutputStream  out ;
			        	out = response.getOutputStream();
			        	   //创建缓冲区
				        byte buffer[] = new byte[1024];
				        int len = 0;
				         //循环将输入流中的内容读取到缓冲区当中
						while((len=inputCrl.read(buffer))>0){
						     //输出缓冲区的内容到浏览器,实现文件下载
						     out.write(buffer, 0, len);
						 }
						final user u=ServletContextUtil.getLoginuser();
						log log = new log();
						log.setAdmin_name(u.getUserName());
						log.setAdmin_uid(u.getLoginAccount());
						Date date = new Date();
						SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
						String t = sdf.format(date);
						log.setCreate_date(t);//创建时间
					        log.setRemark("下载证书源+"+certName+"!");	
						logService.addLog(log);
						inputCrl.close();
						out.close();
						out.flush();  
					} catch (IOException e) {
						// TODO 自动生成的 catch 块
						e.printStackTrace();
					}
			
		      
				}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值