Java文件上传与文件下载
作者:adminjiang发布时间:2021-07-06分类:计算机教程浏览:787
数据上传是客户端向服务器端上传数据,客户端向服务器发送的所有请求都属于数据上传。文件上传是数据上传的一种特例,指客户端向服务器上传文件。即将保存在客户端的文件上传一个副本到服务器,并保存在服务器中。
1. 上传表单要求
文件上传要求客户端提交特殊的请求——multipart请求,即包含多部分数据的请求。必须将
标签的enctype属性值设为“multipart/form-data”,enctype表示encodingType,及编码类型
由于客户端上传文件的大小是不确定的,所以http协议规定,文件上传的数据要存放于请求正文中,不能出现在URL地址栏内。也就是说,想要上传文件必须提交POST请求。
表单中要有标签
注意:multipart/form-data请求与普通请求不同
2. 下载文件上传jar包并查看官方文档
打开Apache官网http://www.apache.org/,选择APACHE PROJECT LIST中的Commons
选择Commons中的FileUpload项目,并下载jar包和源文件
查看FileUpload的工作方式
查看FileUpload项目的API
3. 使用第三方jar包上传文件
public class RegisterServlet extends HttpServlet { private static final long serialVersionUID = 1L; public RegisterServlet() { super(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.getWriter().append("Served at: ").append(request.getContextPath()); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //第一步、判断请求是否为multipart请求 if(!ServletFileUpload.isMultipartContent(request)) { throw new RuntimeException("当前请求只支持文件上传"); } try { //第二步、创建FileItem工厂 DiskFileItemFactory factory = new DiskFileItemFactory(); //设置临时文件存储目录 String path = this.getServletContext().getRealPath("/Temp"); File temp = new File(path); factory.setRepository(temp); //单位:字节。本例设置边界值为2MB,超过该值会创建临时文件 factory.setSizeThreshold(1024*1024*2); //第三步、创建文件上传核心组件 ServletFileUpload upload = new ServletFileUpload(factory); //设置item的头部字符编码,解决中文乱码问题 upload.setHeaderEncoding("utf-8"); //设置单个上传文件的最大值为5MB upload.setFileSizeMax(1024*1024*5); //设置一次上传所有文件总和的最大值为10MB(上传多个文件时起作用) upload.setFileSizeMax(1024*1024*10); //第四步、解析请求获取所有的item List items = upload.parseRequest(request); //第五步、遍历item for(FileItem item:items) { if (item.isFormField()) { processFormField(item); } else { processUploadedFile(item); } } } catch (FileUploadException e) { e.printStackTrace(); } } private void processFormField(FileItem item) { try { String name = item.getFieldName(); //解决中文乱码问题 String value = item.getString("utf-8"); System.out.println(name+"="+value); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } private void processUploadedFile(FileItem item) { try { InputStream inputStream = item.getInputStream(); String fieldName = item.getFieldName(); //获取上传文件原始名称 String fileName = item.getName(); //解决文件同名问题 fileName = System.currentTimeMillis()+fileName; String contentType = item.getContentType(); boolean isInMemory = item.isInMemory(); long sizeInBytes = item.getSize(); String path = this.getServletContext().getRealPath("/UploadContent"); //Date now = new Date(); Calendar now = Calendar.getInstance(); //对上传的文件进行分类管理 path += "/"+now.get(Calendar.YEAR)+"/"+(now.get(Calendar.MONTH)+1)+"/"+now.get(Calendar.DAY_OF_MONTH); //若目录不存在,则创建该目录 File directory = new File(path); if(!directory.exists()) { directory.mkdirs(); } File descFile = new File(path,fileName); OutputStream outputStream = new FileOutputStream(descFile); int length = -1; byte[] buffer = new byte[1024]; while((length=inputStream.read(buffer))!=-1) { outputStream.write(buffer, 0, length); } outputStream.close(); inputStream.close(); //删除临时文件 item.delete(); } catch (IOException e) { e.printStackTrace(); } } }
Java文件下载
数据下载是客户端从服务器获取数据,服务器向客户端发送的所有响应都属于数据下载。文件下载是数据下载的一种特例,指客户端从服务器下载文件,即将保存在服务器的文件下载一个副本到客户端。通常我们对服务器所发出的请求,大多是文件下载请求,从服务器中下载文本、图片、声音、视频等文件,客户端浏览器对这些文件进行解析后,我们才能看到多媒体信息。
1. 超链接下载
浏览器能解析的文件会直接显示,如:pdf、jpg......
浏览器解析不了的文件会被另存为,如:rar、exe......
浏览器版本不一样,对文件的解析能力也不同
缺点:下载内容的形式(直接显示/另存为)由浏览器决定,跟服务器无关
2. Servlet方式下载
设置响应头部属性content-disposition值为attachment
获取连接服务器源文件的输入流
获取输出流
将输入流中的数据写到输出流中
public class DownloadServlet extends HttpServlet { private static final long serialVersionUID = 1L; public DownloadServlet() { super(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //设置响应的头部属性content-disposition值为attachment //使用filename来指定文件名 String filename = "超跑.png"; byte[] bytes = filename.getBytes("utf-8"); //http协议规定浏览器只能接受ISO8859-1类型的字节数据 filename = new String(bytes,"ISO8859-1"); response.setHeader("content-disposition", "attachment;filename="+filename); //获取连接服务器资源文件的输入流 InputStream is = request.getServletContext().getResourceAsStream("/Resources/BS架构原理图1.png"); //获取输出流 ServletOutputStream os = response.getOutputStream(); //将输入流中的数据写到输出流中 int length = -1; byte[] buffer = new byte[1024]; while((length=is.read(buffer))!=-1) { os.write(buffer,0,length); } os.close(); is.close(); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
广州北大青鸟依托北京大学雄厚资源,是北大青鸟华南地区就业示范校区,学校提供学历+技能+就业服务,主要开设热门课程java培训,UI设计培训,PHP培训,Web前端培训,软件开发编程培训等全程项目实战,免费就业推荐等,详情请点击右边的咨讯框咨询在线的老师,同时还可以获取免费的试听课程,欢迎咨询哦!!!
- 上一篇:Java的学习
- 下一篇:零基础学习Java入门到精通
相关推荐
- 清远信息:2024年广清杯清远南粤家政技能大赛举行决赛|||计算机培训机构
- 汕尾信息:陈良川带队到汕尾技师学院调研|||计算机职业技能培训班
- 东莞信息:凤岗凤岗镇组织召开社保参保缴费及劳动用工政策宣讲会|||计算机软件培训学校
- 阳江信息:2024年度注册城乡规划师职业资格考试的合格标准是怎样的?|||计算机软件培训学校
- 阳江信息:职业技能提升补贴对象有哪些?|||大学生计算机培训学校
- 清远信息:清远市首家社保服务合作网点在清城区举办启动仪式|||计算机职业技能培训班
- 汕头信息:招聘658名中高端人才!2024年汕头市引进中高端人才专场招聘会举行|||北大青鸟计算机培训中心
- 东莞信息:广东省社保智能经办现场会在东莞召开|||大学生计算机培训学校
- 东莞信息:东坑镇举办2024年重点群体系列招聘活动|||计算机职业技能培训班
- 东莞信息:万江万江街道成功举办第四届粤菜师傅烹饪技能竞赛|||广州计算机编程培训
- 计算机教程排行
-
- 1汕头信息:“公共就业服务进校园”粤东专场在汕头大学举行|||计算机网络培训学校
- 2江门信息:构建和谐劳动关系优化提升营商环境江门市开展推进新时代和谐劳动关系创建活动|||广州学电脑培训学校
- 3汕头信息:2024年广东省公共就业服务进校园粤东片区专场活动诚邀各用人单位参会|||广州计算机编程培训
- 4广州中考成绩公布,高中阶段学校录取控制分数线公布,普高最低控制线502分
- 5清远信息:校企双向奔赴清远市人社部门携企赴省内外高校招才引智|||广州计算机编程培训
- 6江门信息:工伤保险缴费误区:最低工资非缴费基准,违规用人单位将面临法律风险!|||计算机软件培训学校
- 7惠州信息:2024年第一季度惠州人力资源市场供求情况|||北大青鸟计算机培训中心
- 8惠州信息:“惠州市就业驿站巡礼”之惠阳新圩站|||大学生计算机培训学校
- 9汕尾信息:世界技能大赛获奖选手全省巡回宣讲交流活动走进汕尾|||电脑计算机编程培训学校
- 标签列表
-
- Java (3694)
- 北大青鸟 (3713)
- 软件开发 (3613)
- JAVA (3413)
- UI设计入门 (2093)
- 惠州北大青鸟 (4375)
- 惠州IT培训 (2558)
- UI设计培训 (2090)
- 惠州UI设计培训 (2095)
- 惠州UI设计培训学校 (2090)
- 惠州计算机软件培训 (6260)
- 惠州计算件软件开发 (6260)
- 惠州计算机软件基础 (6261)
- 惠州计算机JAVA培训 (3574)
- 惠州计算机Java软件开发 (3620)
- 惠州计算机JAVA软件开发 (4645)
- 惠州计算机JAVA软件开发学校 (3338)
- 惠州计算机Java软件开发培训 (3338)
- 北大青鸟IT计算机学校 (5048)
- 北大青鸟IT软件学校 (5062)
- 北大青鸟IT学校 (5059)
- 惠州计算机UI设计软件开发 (2088)
- UI设计基础教程 (2088)
- UI设计是什么 (2088)
- UI设计教程 (2088)
- 网站分类
-
- 计算机教程
- 计算机入门
- 职业学校
- 新闻动态
- 专业课程
- 热门技术
- SEO
- 培训教程
- windows
- linux教程
- 系统集成
- 网站开发
- Html5
- 办公软件
- 师资力量
- 热点问答
- 联系我们
- 计算机学校
- 惠州计算机学校
- 河源计算机学校
- 广州计算机学校
- 深圳计算机学校
- 湛江计算机学校
- 佛山计算机学校
- IT计算机培训信息
- 设计专业
- UI
- 影视特效
- 游戏动漫设计
- Photoshop
- AI设计
- 软件教程
- Java技术
- C语言/C++语言培训
- C#
- Python技术
- PHP
- 数据库
- SQL Server
- 网络教程
- 网络安全
- 网络营销
- 软件专业
- 大数据专业
- 前端开发专业
- 软件测试专业
- Python专业
- 软件实施
- 珠海计算机学校
- 初中生学什么好
- 计算机认证
- 文章归档
-
- 2024年11月 (14)
- 2024年10月 (32)
- 2024年9月 (29)
- 2024年8月 (68)
- 2024年7月 (59)
- 2024年6月 (43)
- 2024年5月 (48)
- 2024年4月 (80)
- 2024年3月 (65)
- 2024年2月 (54)
- 2024年1月 (25)
- 2023年12月 (12)
- 2023年11月 (73)
- 2023年10月 (134)
- 2023年9月 (34)
- 2023年8月 (3)
- 2023年7月 (3)
- 2023年6月 (12)
- 2023年5月 (30)
- 2023年4月 (72)
- 2023年3月 (11)
- 2023年2月 (34)
- 2023年1月 (37)
- 2022年12月 (78)
- 2022年11月 (359)
- 2022年6月 (1193)
- 2022年5月 (570)
- 2022年4月 (1567)
- 2022年3月 (982)
- 2022年2月 (54)
- 2022年1月 (182)
- 2021年9月 (308)
- 2021年8月 (1704)
- 2021年7月 (2423)
- 2021年6月 (1806)
- 2021年5月 (1569)
- 2021年4月 (1380)
- 2021年3月 (1255)
- 2021年2月 (709)
- 2021年1月 (1521)
- 2020年12月 (3626)
- 2020年11月 (1646)
- 2020年10月 (1046)
- 2020年9月 (592)
- 最近发表
-
- 清远信息:2024年广清杯清远南粤家政技能大赛举行决赛|||计算机培训机构
- 汕尾信息:陈良川带队到汕尾技师学院调研|||计算机职业技能培训班
- 东莞信息:凤岗凤岗镇组织召开社保参保缴费及劳动用工政策宣讲会|||计算机软件培训学校
- 阳江信息:2024年度注册城乡规划师职业资格考试的合格标准是怎样的?|||计算机软件培训学校
- 阳江信息:职业技能提升补贴对象有哪些?|||大学生计算机培训学校
- 清远信息:清远市首家社保服务合作网点在清城区举办启动仪式|||计算机职业技能培训班
- 汕头信息:招聘658名中高端人才!2024年汕头市引进中高端人才专场招聘会举行|||北大青鸟计算机培训中心
- 东莞信息:广东省社保智能经办现场会在东莞召开|||大学生计算机培训学校
- 东莞信息:东坑镇举办2024年重点群体系列招聘活动|||计算机职业技能培训班
- 东莞信息:万江万江街道成功举办第四届粤菜师傅烹饪技能竞赛|||广州计算机编程培训