在jsp中有一个a标签 ,当用户点击a标签的时候下载文件。
我们采用href属性直接指向一个服务器地址,只要链接的文件存在,就会给出弹出保存对话框.
点击a标签 先执行onclick事件,再请求href中指向的地址。
前端jsp:
然后在js中:
function downloadtest(id){
var url = "/app/download" + "/" + id;
$("#pluginurl").attr("href",url);
}
后台java代码: 我的是springmvc
/**
* 下载文件
* @param id appid
* @param response
*/
@RequestMapping(value="/download/{id}")
publicvoiddownload(@PathVariableString id, HttpServletResponse response){
String filepath = "";
Result result = appService.getAppById(id);
App app = (App) result.getMap().get("app");
if(app ==null){
return;
}
filepath = app.getUrl();
File file = newFile(filepath);
InputStream inputStream = null;
OutputStream outputStream = null;
byte[] b=newbyte[1024];
intlen =0;
try{
inputStream = newFileInputStream(file);
outputStream = response.getOutputStream();
response.setContentType("application/force-download");
String filename = file.getName();
filename = filename.substring(36, filename.length());
response.addHeader("Content-Disposition","p_w_upload; filename="+ URLEncoder.encode(filename,"UTF-8"));
response.setContentLength( (int) file.length( ) );
while((len = inputStream.read(b)) != -1){
outputStream.write(b, 0, len);
}
} catch(Exception e) {
e.printStackTrace();
}finally{
if(inputStream !=null){
try{
inputStream.close();
inputStream = null;
} catch(IOException e) {
e.printStackTrace();
}
}
if(outputStream !=null){
try{
outputStream.close();
outputStream = null;
} catch(IOException e) {
e.printStackTrace();
}
}
}
}
注意:response.addHeader("Content-Disposition","p_w_upload; filename=" + URLEncoder.encode(filename, "UTF-8"));