SpringMVC实现前后端分离下载

2017年12月14日14:06:56 发表评论 236 views

这个功能的需求来自最近做的项目,我的后端调用Swift服务器的文件。传回来的是byte[]的数组。目前把这个byte写到的web服务器下。然后在用现在这个方法实现web服务器下载。

现在暂时这样实现,以此文做个记录,怕未来忘记。

前端web:

选中文件,点击下载文件执行的是能弹出一个保存框去保存文件。

SpringMVC实现前后端分离下载

web前端部分代码:

name:获取选中文件的文件名

var form:伪造一个隐藏的form提交表单,提交是“name”变量。

else {
name = $(".checked").parent().next().find("span").text();
var form = $("<form>");
form.attr("style", "display:none");
form.attr("target", "");
form.attr("method", "post");
form.attr("action", 'downloadFile.action');
var fileInput = $("<input>");
fileInput.attr("type", "hidden");
fileInput.attr("id", "name");
fileInput.attr("name", "name");
fileInput.attr("value", name);
$("body").append(form);
form.append(fileInput);
form.submit();
form.remove()
}

 java后端方法代码:

第一部分的try{}catch()是项目调用内容。

// 下载文件
@RequestMapping("/downloadFile.action")
@ResponseBody
public void downloadFile(String name,HttpServletRequest request,HttpServletResponse response
/*@RequestParam(value = "name", required = true) String name*/) throws FileNotFoundException {
String rpath, downPath;
// 用户
User user = getSessionUser(request);
String username = user.getUsername();
rpath = username + "/" + getPath + name;
byte buf[] = swiftStorageService.downloadFile(rpath);
// downPath = "upload/" + name;
downPath = request.getSession().getServletContext().getRealPath("/")
+ "upload/" + name;
System.out.println("downPath:" + downPath);
File file = new File(downPath);
FileOutputStream fileout = null;
try {
fileout = new FileOutputStream(file);
fileout.write(buf);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
fileout.close();
} catch (IOException e) {
e.printStackTrace();
}
}
File rfile = new File(downPath);
response.setContentType("application/force-download");// 设置强制下载不打开
response.addHeader("Content-Disposition",
"attachment;fileName=" + name);// 设置文件名
byte[] buffer = new byte[1024];
BufferedInputStream bis = null;
System.out.println("downPath:" + downPath);
try{
bis = new BufferedInputStream(new FileInputStream(rfile));
OutputStream out = response.getOutputStream();
int len = 0;
while((len = bis.read(buffer))!=-1){
out.write(buffer, 0, len);
}
}catch(Exception e){
e.printStackTrace();
}finally{
try {
bis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

好了未优化的记录就到此了。

 

 

 

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的支付宝红包
  • 支付宝红包扫一扫打赏
  • weinxin
  • A+
所属分类:JAVA

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: