以流的方式下载附件


<a onclick="downloadFile(filePath)" href="#">(下载)</a>
<iframe name="hidden_frame" id="hidden_frame" style="display:none"></iframe>



function downloadFile(filePath){
var fileName=encodeURI(filePath);
document.getElementById("hidden_frame").src = "JS/StreetMap/downloadFile.jsp?fileName="+fileName;
}



public void downloadFile() {
HttpServletResponse response = ServletActionContext.getResponse();
HttpServletRequest request = getRequest();
response.setCharacterEncoding("GBK");
String fileUrl=request.getParameter("fileUrl");
String fileName=request.getParameter("fileName");
String cmsAttachRealFile = "";
try {
fileUrl = new String(fileUrl.getBytes("ISO8859-1"),"GBK");
cmsAttachRealFile = FilePathSptUtil.UPLOAD_ROOT_PATH
//+ FilePathSptUtil.UPLOAD_CMS
+ fileUrl;
fileName = new String(fileName.getBytes("ISO8859-1"),"UTF-8");
fileName = URLEncoder.encode(fileName, "UTF-8");
} catch (Exception e1) {
// TODO 附件流下载 弹出下载框
e1.printStackTrace();
}
try {
OutputStream o = response.getOutputStream();
byte b[] = new byte[500];
File fileLoad = new File(cmsAttachRealFile);
response.setContentType("application/octet-stream");
response.setHeader("content-disposition",
"attachment; filename=\""
+ fileName + "\"");
long fileLength = fileLoad.length();
String length1 = String.valueOf(fileLength);
response.setHeader("Content_Length", length1);
FileInputStream in = new FileInputStream(fileLoad);
int n;
while ((n = in.read(b)) != -1) {
o.write(b, 0, n);
}
in.close();
o.close();
} catch (Exception e) {
// TODO: handle exception
}
}


//jsp
response.setCharacterEncoding("UTF-8");
String fileName=request.getParameter("fileName");
String applicationPath = application.getRealPath("");
String filePath =applicationPath;
String suffixName = fileName.substring(fileName.lastIndexOf(".")+1,fileName.length()).toLowerCase();
String realFilePath = "";
try {
// fileName = new String(fileName.getBytes("ISO-8859-1"),"UTF-8");
realFilePath = filePath+fileName;//附件地址
File fileLoad = new File(realFilePath);
if(!fileLoad.exists()){
System.out.println("没有您要打开的文件");
}else {
// fileName = URLEncoder.encode(fileName, "UTF-8");
String realFileName = fileName.substring(fileName.lastIndexOf("/")+1,fileName.length());
realFileName = URLEncoder.encode(realFileName, "UTF-8");
OutputStream o = response.getOutputStream();
byte b[] = new byte[512];
//contentType设定
String contentType = ZipUtil.getContentType(suffixName);
response.setContentType(contentType);
response.setContentType("application/octet-stream");
//attachment表示网页会出现保存、打开对话框;inline 直接页面打开
response.setHeader("content-disposition","attachment; filename=\"" + realFileName + "\"");
//response.setHeader("content-disposition","inline; filename=\"" + fileName + "\"");
long fileLength = fileLoad.length();
String length1 = String.valueOf(fileLength);
response.setHeader("Content_Length", length1);
FileInputStream in = new FileInputStream(fileLoad);
int n;
while ((n = in.read(b)) != -1) {
o.write(b, 0, n);
}
in.close();
o.close();
}
} catch (Exception e) {
e.printStackTrace();
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值