//下载上传的文件 controller层
@RequestMapping(value="/downLoadFile")
@ResponseBody
public void downLoadFile(@RequestParam(value="url") String url,HttpServletResponse response)throws Exception{
voiceService.downLoadFile(url, response);
}
//根据url下载 service
@Override
public void downLoadFile(String url,HttpServletResponse response) throws Exception {
HttpClientService.floorOSSDownFile(url,response);
}
/**
* 文件下载 HttpClientService工具类floorOSSDownFile
* @param url 图片的url
* @param response
* @return
* @throws IOException
*/
public static void floorOSSDownFile(String url,HttpServletResponse response) throws IOException{
try {
//url 为图片的url
URL urls = new URL(url);
// 打开连接
URLConnection con = urls.openConnection();
// 设置请求超时为5s
con.setConnectTimeout(5 * 1000);
// 输入流
// BufferedInputStream is = (BufferedInputStream)
// con.getInputStream();
InputStream in = con.getInputStream();
// 取出文件名称
String[] strArray = url.split("/");
String fileName = strArray[strArray.length - 1];
// 1K的数据缓冲
byte[] bs = new byte[1024];
// 读取到的数据长度
int len;
// 输出的文件流
// 缓冲文件输出流
BufferedOutputStream out = new BufferedOutputStream(
response.getOutputStream());
// 通知浏览器以附件形式下载
response.setHeader("Content-Disposition", "attachment;filename="+ URLEncoder.encode(fileName, "UTF-8"));
// 开始读取
while ((len = in.read(bs)) != -1) {
out.write(bs, 0, len);
}
// 完毕,关闭所有链接
out.close();
in.close();
} catch (Exception e) {
e.printStackTrace();
}
}
前端测试代码
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<script type="text/javascript" src="js/jquery.min.js"></script>
<title></title>
</head>
<body>
<form action="#">
文件的url:<input type="text" name="url" id="url"/>
<input id="btn" type="button" value="下载"/>
</form>
</body>
<script >
document.getElementById('btn').onclick = function(){
var url = document.getElementById('url').value;
alert("url="+url);
location.href = 'http://localhost:8088/voice/downLoadFile?url=' + url ;
}
</script>
</html>
第二种下载方式
/** * * @param url 文件的地址 * @param fileName 文件名 * @param response */ public static void floorDownFile(String url,String fileName, HttpServletResponse response) { try { File file = new File(url); InputStream in =new FileInputStream(file); // 取出文件名称 // String[] strArray = url.split("/"); //String fileName = strArray[strArray.length - 1]; // 1K的数据缓冲 byte[] bs = new byte[1024]; // 读取到的数据长度 int len; // 输出的文件流 // 缓冲文件输出流 BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream()); // 通知浏览器以附件形式下载 response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8")); // 开始读取 while ((len = in.read(bs)) != -1) { out.write(bs, 0, len); } // 完毕,关闭所有链接 out.close(); in.close(); } catch (Exception e) { e.printStackTrace(); } }