本文实例为大家分享了springmvc文件下载的具体代码,供大家参考,具体内容如下
两个案例
1.为登录用户提供下载服务。
2.阻止仅通过输入网址即可获取下载。
文件下载概览
为了将文件发送给浏览器,我们需要在控制器中完成以下操作:
案例1:为登录用户提供下载服务
domain类
package domain; public class login { private string username; private string password; public string getusername() { return username; } public void setusername(string username) { this.username = username; } public string getpassword() { return password; } public void setpassword(string password) { this.password = password; } }
controller控制器
package controller; import domain.login; import org.apache.commons.logging.log; import org.apache.commons.logging.logfactory; import org.springframework.stereotype.controller; import org.springframework.ui.model; import org.springframework.web.bind.annotation.modelattribute; import org.springframework.web.bind.annotation.requestmapping; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; import javax.servlet.http.httpsession; import java.io.*; @controller public class resourcecontroller { private static final log logger = logfactory.getlog(resourcecontroller.class); @requestmapping(value = "/login") public string login(@modelattribute login login, httpsession session, model model) { model.addattribute("login",new login()); if("ms".equals(login.getusername())&&"123".equals(login.getpassword())) { session.setattribute("loggedin",boolean.true); return "main"; } else { return "loginform"; } } @requestmapping(value = "/resource_download") public string downloadresource(httpsession session, httpservletrequest request, httpservletresponse response) { if(session==null||session.getattribute("loggedin")==null) { return "loginform"; } string datadirectory = request.getservletcontext().getrealpath("/web-inf/data"); file file = new file(datadirectory,"blog.zip"); if(file.exists()) { response.setcontenttype("application/octet-stream"); response.addheader("content-disposition","attachment;filename=blog.zip"); byte[] buffer = new byte[1024]; fileinputstream fis =null; bufferedinputstream bis =null; try { fis = new fileinputstream(file); bis = new bufferedinputstream(fis); outputstream os =response.getoutputstream(); int i =bis.read(buffer); while (i!=-1) { os.write(buffer, 0, i); i=bis.read(buffer); } } catch (filenotfoundexception e) { e.printstacktrace(); } catch (ioexception e) { e.printstacktrace(); }finally { try { bis.close(); } catch (ioexception e) { e.printstacktrace(); } try { fis.close(); } catch (ioexception e) { e.printstacktrace(); } } } return null; } }
编写视图
main.jsp
<%@ page contenttype="text/html;charset=utf-8" language="java" %> <html> <head> <title>downpage</title> </head> <body> <h4>点击链接下载文件</h4> <p> <a href="resource_download" rel="external nofollow" >down</a> </p> </body> </html>
loginform.jsp
<%@ page contenttype="text/html;charset=utf-8" language="java" %> <html> <head> <title>登录页面</title> </head> <body> <form:form commandname="login" action="login" method="post"> 账号: <br> <form:input path="username" csserrorclass="error" id="username"/> <br> 密码: <br> <form:input path="password" csserrorclass="error" id="password"/> <br> <input type="submit" value="提交"> </form:form> </body> </html>
案例2:阻止仅通过输入网址即可获取下载
@requestmapping(value = "/resource_download") public string downloadresource(httpsession session, httpservletrequest request, httpservletresponse response,@requestheader string refuer ){ if(refer==null) //通过判断refer来浏览器输入网址就能下载图片的情况 { return "loginform"; } string datadirectory = request.getservletcontext().getrealpath("/web-inf/data"); file file = new file(datadirectory,"blog.zip"); if(file.exists()) { response.setcontenttype("application/octet-stream"); response.addheader("content-disposition","attachment;filename=blog.zip"); byte[] buffer = new byte[1024]; fileinputstream fis =null; bufferedinputstream bis =null; try { fis = new fileinputstream(file); bis = new bufferedinputstream(fis); outputstream os =response.getoutputstream(); int i =bis.read(buffer); while (i!=-1) { os.write(buffer, 0, i); i=bis.read(buffer); } } catch (filenotfoundexception e) { e.printstacktrace(); } catch (ioexception e) { e.printstacktrace(); }finally { try { bis.close(); } catch (ioexception e) { e.printstacktrace(); } try { fis.close(); } catch (ioexception e) { e.printstacktrace(); } } } return null; } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。
如对本文有疑问, 点击进行留言回复!!
Android10相机拍摄保存照片并显示(解决各种闪退,添加v4包)
安裝ubuntu18.04安装android studio(1)
Codeforces Round #656 (Div. 3)D. a-Good String(递归+dfs)
网友评论