经过测试 firefox、QQ、IE 浏览器是可以的 chrome浏览器不行(直接下载了)
1. 系统框架springmvc+jsp
2. 后台servlet代码
@RequestMapping("download") public void download(HttpServletRequest request,HttpServletResponse response){ BufferedInputStream dis = null; BufferedOutputStream fos = null; String urlString = request.getParameter("urlString"); String fileName = urlString.substring(urlString.lastIndexOf('/') + 1); try { URL url = new URL(urlString); //response.setContentType("application/x-msdownload;"); response.setContentType("application/octet-stream"); response.setHeader("Content-disposition", "attachment; filename=" + new String(fileName.getBytes("utf-8"), "ISO8859-1")); response.setHeader("Content-Length", String.valueOf(url.openConnection().getContentLength())); dis = new BufferedInputStream(url.openStream()); fos = new BufferedOutputStream(response.getOutputStream()); byte[] buff = new byte[2048]; int bytesRead; while (-1 != (bytesRead = dis.read(buff, 0, buff.length))) { fos.write(buff, 0, bytesRead); } } catch (Exception e) { e.printStackTrace(); } finally { if (dis != null) try{ dis.close(); }catch (Exception e){ e.printStackTrace(); } if (fos != null) try{ fos.close(); }catch (Exception e){ e.printStackTrace(); } } }
3. 页面jsp代码
<input type="button" onclick="downloadImage()" value="下载"> <script> function downloadImage(){ var urlString = "http://pic32.nipic.com/20130829/12906030_124355855000_2.png"; //跳转到后端控制器 location.href="${ctx}/guest/download.do?urlString="+urlString; } </script>
4. 下载效果1(firefox)
下载效果2(QQ)