下载文件直接通过流下载,并修改下载名 and 解决乱码问题

@RequestMapping(value = "/downloadfromhive")
@Test
public String downloadfromhive(HttpServletRequest request,
HttpServletResponse response, Model model,
UnstructuredBean unstructuredbean) {
IDispatcherWebServiceService dispatcherWebServiceService = new IDispatcherWebServiceService();
IDispatcherWebService service = (IDispatcherWebService) dispatcherWebServiceService
.getIDispatcherWebServicePort();


JsonObject jsonObject = new JsonObject();
jsonObject.addProperty("datasource", "HBASE");
jsonObject.addProperty("actiontype", "downloadfile");
jsonObject.addProperty("tablename", "file");
jsonObject.addProperty("fm", "cf");
jsonObject.addProperty("rowkey", unstructuredbean.getRowkey());
jsonObject.addProperty("context", "context");
Gson gson = new Gson();
final String json = gson.toJson(jsonObject);
String result = service.handle(json);
InfoBean infoBean = new InfoBean();
infoBean = gson.fromJson(result, InfoBean.class);
String message = infoBean.getMessage();
BASE64Decoder base64Decoder = new BASE64Decoder();
byte[] bytes = null;
DataOutputStream dos = null;


try {
bytes = base64Decoder.decodeBuffer(message);
String fileName = unstructuredbean.getName()+"."+unstructuredbean.getType();

// 修改下载名中文乱码
       String userAgentString = request.getHeader("User-Agent");
       String browser = UserAgent.parseUserAgentString(userAgentString).getBrowser().getGroup().getName();
       if(browser.equals("Chrome") || browser.equals("Internet Explorer") || browser.equals("Safari")) {
        fileName = URLEncoder.encode(fileName,"utf-8").replaceAll("\\+", "%20");
       } else {
        fileName = MimeUtility.decodeText(fileName);
       }
       
response.addHeader("Content-Disposition", "attachment;filename="+fileName);
OutputStream os = new BufferedOutputStream(response.getOutputStream());
response.setContentType("application/vnd.ms-excel;charset=gb2312");
os.write(bytes);
os.flush();
os.close(); 
System.out.println("-------完成下载-------");
} catch (Exception e) {
System.out.println("exception:"+e);
model.addAttribute("exceptions", "下载成功!");


} finally {

}
return "redirect:selectbyhiveother";
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值