运用servlet来实现文件的上传与下载
文件的上传:
1 /**
2 * 1. 文件的上传必须使用post请求,因为get请求的数据是在 url地址上, 但是url地址
3 * 能够携带数据大小是有限:2k 4k
4 * 2. 文件上传必须的指定 @MultipartConfig, 意思说使用该Servlet来处理 多媒体的表单数据。
5 */
6 @WebServlet(value = "/file",name = "FileServlet")
7 @MultipartConfig//文件上传必须指定他 告诉这个类是指定我们表单是一个多媒体表单数据
8 public class FileServlet extends HttpServlet {
9
10 //文件存储的路径
11 private String fileLocation="F:/nginx/nginx-1.17.2/html/";
12 private String fileServer = "http://localhost/";
13 @Override
14 protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
15 req.setCharacterEncoding("utf-8");
16 Part part=req.getPart("avatar");//获取上传文件的所有信息,是对将要上传的一个文件进行封装
17
18 //获取文件名
19 //part.getName();//这个不是文件名
20 //文件名是在Part的头部, "content-disposition"中存储有文件名
21 String contentDisposition=part.getHeader("content-disposition");
22
23 // \"转义
24 String filePrefix="filename=\"";
25
26 //获取文件名开始位置所在的索引
27 int index = contentDisposition.indexOf(filePrefix) + filePrefix.length();
28
29
30 //获取文件名, contentDisposition.length() - 1 原因是因为最后有个 "
31 String fileName = contentDisposition.substring(index, contentDisposition.length() - 1);
32 //System.out.println(fileName);
33
34 //获取文件的后缀名 .png .txt
35 String fileSuffix=fileName.substring(fileName.indexOf("."));
36
37 //随机生成一个字符串
38 String newFilename= UUID.randomUUID().toString()+fileSuffix;
39
40 InputStream is = part.getInputStream(); //获取文件的输入流
41 //System.out.println(contentDisposition);
42
43 //文件输出流
44 OutputStream os=new FileOutputStream(new File(fileLocation+newFilename));
45 //OutputStream os=new FileOutputStream(fileLocation+newFilename);
46
47
48 //存储IO流没次读取的数据
49 byte[] bs=new byte[1024];
50 int length=0;//没次读取的长度
51
52
53 while ((length=is.read(bs))!=-1){
54 os.write(bs,0,length);
55 }
56 os.flush();
57 os.close();
58 is.close();
59
60 resp.setContentType("text/html;charset=utf-8");
61 PrintWriter writer = resp.getWriter();
62
63 StringBuffer html = new StringBuffer();
64 html.append("<html>")
65 .append("<head></head>")
66 .append("<body><h1>上传成功</h1>")
67 // fileServer + newFileName = http://localhost/0dc725b1-5b12-4865-bbd0-2fbed66b9e7e.png
68 .append("<img src=\"" + fileServer + newFilename + "\">")
69 .append("<video src=\"" + fileServer + newFilename + "\" width=\"600\" height=\"400\" autoplay>")
70 .append("</body></html>");
71
72 // String html = "<html><head></head><body><h1>注册成功</h1><p>" + user.getInterests() + "</p></body></html>";
73
74 writer.write(html.toString());
75 writer.flush();
76 writer.close();
77
78 }
79 }
文件的表单数据:
1 <body>
2
3 <!--<video src="http://localhost/33.mp4" width="600" height="400"/>-->
4
5 <!--
6 1 文件的上传必须是post,因为post请求的数据是放在请求体里面
7 可以携带大量的数据
8 2 enctype必须是多媒体表单数据 文件的上传必须要这个参数
9 -->
10 <form method="post" enctype="multipart/form-data" action="file">
11 File:<input type="file" name="avatar"><br>
12 <input type="submit">
13 </form>
14 </body>

文件的下载:
1 @WebServlet(value = "/dowload",name = "DownLoadServlet")
2 public class DownLoadServlet extends HttpServlet {
3
4 //资源地址
5 private String resourceLocation="F:/nginx/nginx-1.17.2/html/";
6 //下载是一个get请求
7 @Override
8 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
9
10 // //文件输入流
11 // InputStream is=new FileInputStream(resourceLocation);
12 // String fileName="44.mp4";//文件名
13 //
14 // byte[] bs=new byte[2048];
15 // int length=0;
16 //
17 // //处理中文文件下载的时候浏览器显示乱码的问题
18 // String cnFileName= URLEncoder.encode(fileName,"utf-8");
19 //
20 // //下载的时候要指定头信息 是一个固定的方式
21 // resp.setHeader("content-disposition","attachment;filename="+cnFileName);
22 //
23 // ServletOutputStream servletOutputStream=resp.getOutputStream();
24 //
25 // while ((length=is.read(bs))!=-1){
26 // servletOutputStream.write(bs,0,length);
27 // }
28 // servletOutputStream.flush();
29 // servletOutputStream.close();
30 // is.close();
31
32 String name=req.getParameter("name");
33 //文件输入流
34 InputStream is=new FileInputStream(resourceLocation+name);
35 // String fileName="44.mp4";//文件名
36
37 byte[] bs=new byte[2048];
38 int length=0;
39
40 //处理中文文件下载的时候浏览器显示乱码的问题
41 String cnFileName= URLEncoder.encode(name,"utf-8");
42
43 //下载的时候要指定头信息 是一个固定的方式
44 resp.setHeader("content-disposition","attachment;filename="+cnFileName);
45
46 ServletOutputStream servletOutputStream=resp.getOutputStream();
47
48 while ((length=is.read(bs))!=-1){
49 servletOutputStream.write(bs,0,length);
50 }
51 servletOutputStream.flush();
52 servletOutputStream.close();
53 is.close();
54
55 }
56 }
文件下载的表单:
1 <body>
2 <a href="dowload?name=2.png">2.png下载</a><br>
3 <a href="dowload?name=11.png">11.png下载</a><br>
4 <a href="dowload?name=33.mp4">33.mp4下载</a><br>
5 <a href="dowload?name=44.mp4">44.mp4下载</a><br>
6 </body>

总结:
无论是文件的下载还是上传 当用到servlet时候并且当你的电脑和手机在同一个局域网下面,那么当你在手机浏览器里面输入自己的ip访问地址的时候,你的手机会进行上传和下载同时你的电脑里面也会有相应的数据。

运用servlet来实现文件的上传与下载的更多相关文章
- java实现文件的上传和下载
		
1. servlet 如何实现文件的上传和下载? 1.1上传文件 参考自:http://blog.csdn.net/hzc543806053/article/details/7524491 通过前台选 ...
 - jsp+servlet实现文件的上传和下载
		
实现文件的上传和下载首先需要理解几个知识,这样才可以很好的完成文件的上传和下载: (1):上传文件是上传到服务器上,而保存到数据库是文件名 (2):上传文件是以文件转换为二进制流的形式上传的 (3): ...
 - 在SpringMVC框架下实现文件的  上传和  下载
		
在eclipse中的javaEE环境下:导入必要的架包 web.xml的配置文件: <?xml version="1.0" encoding="UTF-8" ...
 - 初学Java Web(7)——文件的上传和下载
		
文件上传 文件上传前的准备 在表单中必须有一个上传的控件 <input type="file" name="testImg"/> 因为 GET 方式 ...
 - java web(四):request、response一些用法和文件的上传和下载
		
上一篇讲了ServletContent.ServletCOnfig.HTTPSession.request.response几个对象的生命周期.作用范围和一些用法.今天通过一个小项目运用这些知识.简单 ...
 - Spring MVC 实现文件的上传和下载
		
前些天一位江苏经贸的学弟跟我留言问了我这样一个问题:“用什么技术来实现一般网页上文件的上传和下载?是框架还是Java中的IO流”.我回复他说:“使用Spring MVC框架可以做到这一点,因为Spri ...
 - 文件的上传和下载--SpringMVC
		
文件的上传和下载是项目开发中最常用的功能,例如图片的上传和下载.邮件附件的上传和下载等. 接下来,将对Spring MVC环境中文件的上传和下载进行详细的讲解. 一.文件上传 多数文件上传都是通过表单 ...
 - java 文件的上传和下载
		
主要介绍使用 smartupload.jar 包中的方法对文件的上传和下载.上传时文件是存放在服务器中,我用的是tamcat. 首先建立一个servlet 类,对文件的操作 package com.d ...
 - 使用Loadrunner进行文件的上传和下载
		
最近使用loadrunner中需要录制文件的上传和下载,上传功能模块利用录制可以直接实现,下载无法实现,在网上找到了一段代码,自己动手试验了下,发现没有用 辛苦找到的,还是记录下吧 (1)LoadRu ...
 - JavaWeb中文件的上传和下载
		
JavaWeb中文件的上传和下载 转自: JavaWeb学习总结(五十)——文件上传和下载 - 孤傲苍狼 - 博客园https://www.cnblogs.com/xdp-gacl/p/4200090 ...
 
随机推荐
- MySQL 是否可以用 Docker 容器化?
			
容器 容器是为了解决 "在切换运行环境时,如何保证软件能够正常运行",容器是轻量级应用代码包,它包含在任何环境中运行所需的所有元素的软件包.容器可以虚拟化操作系统,包含依赖项,例如 ...
 - gin解决CORS跨域问题
			
直接设置跨域参数 新建 cors 文件 package cors import ( "time" "github.com/gin-contrib/cors" & ...
 - go cobra Error: required flag(s) "pkg-name" not set
			
Cobra 是一个 Golang 包,它提供了简单的接口来创建命令行程序.同时,Cobra 也是一个应用程序,用来生成应用框架,从而开发以 Cobra 为基础的应用. 使用 cobra init 命令 ...
 - Docker IPv6 网络环境配置
			
由于目前Docker 在IPv6网络中运行的相关配置并非默认自动生成的,所以需要大家根据自己的网络环境来具体做一些相应配置,具体如下: 本次操作是在 Ubuntu16/18或者CentOS7 OS上面 ...
 - 探秘Transformer系列之(21)--- MoE
			
探秘Transformer系列之(21)--- MoE 目录 探秘Transformer系列之(21)--- MoE 0x00 概要 0x01 前置知识 1.1 MoE出现的原因 1.1.1 神经网络 ...
 - B站,首战告捷!
			
大家好,我叫良许,本来是一名写代码的博主,万万没想到,我居然我会放下脸皮在B站当UP主,还全程露脸不戴口罩! 到目前为止,已经拥有 1.1 万粉丝啦~ 我是从去年12月中旬开始正式进驻B站,但是,因为 ...
 - dubbo源码解析-服务暴露与发现
			
一.概述 dubbo是一个简单易用的RPC框架,通过简单的提供者,消费者配置就能完成无感的网络调用.那么在dubbo中是如何将提供者的服务暴露出去,消费者又是如何获取到提供者相关信息的呢? 二.dub ...
 - Windows系统设置开机自启动+分块压缩+文件共享
			
开机自启动+分块压缩+文件共享 一.设置开机自启动 win+R 打开运行窗口,输入 shell:startup 此时桌面会弹出一个目录文件夹,只需要将需要启动的软件放入该文件夹即可开机自启. C:\U ...
 - 如何在Uniapp项目中引入uni_modules中的依赖?
			
在Uniapp项目中引入uni_modules中的依赖分为以下几种情况: 对于通用组件: 如果你已经通过HBuilderX插件市场安装了某个uni_modules组件,通常只需在页面的.vue文件中按 ...
 - 移动开发webapp开发常用meta设置手机浏览器全屏模式,webappmeta
			
1.WebApp全屏模式: <meta name="viewport" content="width=device-width,initial-scale=1.0, ...