文件的上传:

 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来实现文件的上传与下载的更多相关文章

  1. java实现文件的上传和下载

    1. servlet 如何实现文件的上传和下载? 1.1上传文件 参考自:http://blog.csdn.net/hzc543806053/article/details/7524491 通过前台选 ...

  2. jsp+servlet实现文件的上传和下载

    实现文件的上传和下载首先需要理解几个知识,这样才可以很好的完成文件的上传和下载: (1):上传文件是上传到服务器上,而保存到数据库是文件名 (2):上传文件是以文件转换为二进制流的形式上传的 (3): ...

  3. 在SpringMVC框架下实现文件的 上传和 下载

    在eclipse中的javaEE环境下:导入必要的架包 web.xml的配置文件: <?xml version="1.0" encoding="UTF-8" ...

  4. 初学Java Web(7)——文件的上传和下载

    文件上传 文件上传前的准备 在表单中必须有一个上传的控件 <input type="file" name="testImg"/> 因为 GET 方式 ...

  5. java web(四):request、response一些用法和文件的上传和下载

    上一篇讲了ServletContent.ServletCOnfig.HTTPSession.request.response几个对象的生命周期.作用范围和一些用法.今天通过一个小项目运用这些知识.简单 ...

  6. Spring MVC 实现文件的上传和下载

    前些天一位江苏经贸的学弟跟我留言问了我这样一个问题:“用什么技术来实现一般网页上文件的上传和下载?是框架还是Java中的IO流”.我回复他说:“使用Spring MVC框架可以做到这一点,因为Spri ...

  7. 文件的上传和下载--SpringMVC

    文件的上传和下载是项目开发中最常用的功能,例如图片的上传和下载.邮件附件的上传和下载等. 接下来,将对Spring MVC环境中文件的上传和下载进行详细的讲解. 一.文件上传 多数文件上传都是通过表单 ...

  8. java 文件的上传和下载

    主要介绍使用 smartupload.jar 包中的方法对文件的上传和下载.上传时文件是存放在服务器中,我用的是tamcat. 首先建立一个servlet 类,对文件的操作 package com.d ...

  9. 使用Loadrunner进行文件的上传和下载

    最近使用loadrunner中需要录制文件的上传和下载,上传功能模块利用录制可以直接实现,下载无法实现,在网上找到了一段代码,自己动手试验了下,发现没有用 辛苦找到的,还是记录下吧 (1)LoadRu ...

  10. JavaWeb中文件的上传和下载

    JavaWeb中文件的上传和下载 转自: JavaWeb学习总结(五十)——文件上传和下载 - 孤傲苍狼 - 博客园https://www.cnblogs.com/xdp-gacl/p/4200090 ...

随机推荐

  1. go 编译约束//go:build dev //+build

    前言 在真实环境中,我们可能需要为不同的编译环境编写不同的 Go 代码,所以需要做构建约束. 比如:syscall.NewLazyDLL("test.dll") 加载 dll 的程 ...

  2. JdbcTemplate 自定义返回的结果集字段和实体类映射

    废话不多:抄袭代码 package com.webank.wedatasphere.qualitis.handler; import com.webank.wedatasphere.qualitis. ...

  3. DeepSeek 官方推出的实用集成工具百宝箱,建议收藏!

    项目介绍 该实用集成工具百宝箱汇聚了DeepSeek官方精心挑选和推荐的各类集成工具(其中包括:应用程序.AI Agent 框架.AI数据应用框架.RAG 框架.浏览器插件.VS Code 插件等), ...

  4. 【SpringMVC】国际化&文件的上传&使用拦截器&异常处理

    国际化 国际化概述 默认情况下,SpringMVC 根据 Accept-Language 参数判断客户端的本地化类型. 当接受到请求时,SpringMVC 会在上下文中查找一个本地化解析器(Local ...

  5. git库移植

    记一次个人项目移植到组织项目的git应用,留爪. 1. 首先保证你本地有一份完整的库 2. 在 gitee 组织里新建一份裸库 3. 本地库移除所有远程库 git remote //查看所有远程库 g ...

  6. D常用快捷键大全(转)

    Ctrl+PageUp将光标移至本屏的第一行,屏幕不滚动.Ctrl+PageDown将光标移至本屏的最后一行,屏幕不滚动.Ctrl+↓向下滚动屏幕,光标跟随滚动不出本屏.Ctrl+↑向上滚动屏幕,光标 ...

  7. tesseract引擎RVV代码学习笔记

      Tesseract 是一个开源的 OCR(Optical Character Recognition,光学字符识别)引擎,可将图像中的文本转换为机器可读的文本格式.由于组内曾经有同事为这个项目贡献 ...

  8. springboot和jdk的版本对应关系

    spring-boot和jdk的版本对应关系 SpringBoot Versions JDK Versions 0.0 -1.1 6+(6 or higher) 1.2 - 1.5 6 - 7 2.0 ...

  9. 测试工作中用到的MongoDB命令

    1.远程连接MongoDB mongo host:port/dbname (host和port根据自己需要修改) 连接成功页面如下: 2.显示所有数据库 show dbs 3.切换到oversea-a ...

  10. 为了掌握设计模式,开发了一款Markdown 文本编辑器软件(已开源)

    设计模式实战项目:Markdown 文本编辑器软件开发(已开源) 一.项目简介 项目名称:YtyMark-java 本项目是一款基于 Java 语言 和 JavaFX 图形界面框架 开发的 Markd ...