Servlet p8 文件的上传和下载

这篇具有很好参考价值的文章主要介绍了Servlet p8 文件的上传和下载。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

文件的上传和下载

在上网的时候我们常常遇到文件上传的情况,例如上传头像、上传资料等:当然除了上传,遇见下载的情况
也很多,接下来看看我们servlet中怎么实现文件的上传和下载。

文件上传

文件上传涉及到前台页面的编写和后台服务器端代码的编写,前台发送文件,后台接收并保存文件,这才是
一个完整的文件上传。

前台页面

在做文件上传的时候,会有一个上传文件的界面,首先我们需要一个表单,并目表单的请求方式为POST;其次我们的form表单的enctype必须设为 "multipart/form-data",enctype="multipart/form-data”,意思是设置表单的类型为文件上传表单,默认情况下这个表单类型是 "application/.x-www-form-urlencoded",不能用于文件上传,只有使用了multipart/form-data才能完整地传递文件数据。

前台页面代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>文件上传</title>
</head>
<body>
    <!--
        文件上传
        1. 准备表单
        2. 设置表单的提交类型为 POST请求, method="post"
        3. 设置表单的类型为文件上传表单 enctype="multipart/form-data"
        4. 设置文件提交的地址
        5. 准备表单元素
            1. 普通的表单项 type="text"
            2. 文件项 type="file"
        6. 设置表单元素的name属性值(表单提交一定要设置表单元素的name属性值,否则后台无法接收数据)
        -->
    <form method="post" enctype="multipart/form-data" action="uploadServlet">
        姓名:<input type="text" name="uname"><br>
        文件:<input type="file" name="myfile"><br>
        <!-- button按钮的默认类型是 submit-->
        <button>提交</button>
    </form>
</body>
</html>

后台实现

使用注解 @MultipartConfig 将一个Servlet标识为支持文件上传。Servlet将multipart/form-data的
POST请求封装成Part,通过Part对上传的文件进行操作。

代码实现:

import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
import java.io.IOException;

/**
 * @author: 86199
 * @date: 2023/7/3 15:34
 * Description: 文件上传后台代码
 */

@WebServlet("/uploadServlet")
@MultipartConfig //如果是文件上传,必须设置该注解
public class uploadServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("文件上传....");

        //设置请求的编码格式
        req.setCharacterEncoding("UTF-8");

        //获取普通表单项
        String uname = req.getParameter("uname");
        System.out.println("uname = " + uname);

        //文件上传表单
        //获取part对象(Servlet 会将 multipart/form-data 的Post请求封装成一个Part对象)
        Part part = req.getPart("myfile");

        //获取文件名
        String fileName = part.getSubmittedFileName();
        System.out.println("上传文件名 " + fileName);

        //文件存放路径
        String realPath = req.getServletContext().getRealPath("/");
        System.out.println("文件存放路径:" + realPath);

        //上传文件到指定目录
        part.write(realPath + "/" + fileName);
    }
}

文件下载

文件下载

文件下载,即将服务留上的资源下载(拷贝)到本地,我们可以通过两种方式下载。第一种是通过超链接本
身的特性来下载;第二种是通过代码下载,

超链接下载

当我们在HTML或SP页面中使用标签时,原意是希望能够进行跳转,但当超链接遇到浏览器不识别的资源
时会自动下载:当遇见刘览器能够直接显示的资源,浏览器就会默认显示出来,比如txt、pg、jPg等。当然我们
也可以通过download属性规定浏览器进行下载。但有些浏览器并不支持。

默认下载:

<!-- 当超时接遭到浏览器不识别的资时,会自动下载,遇到可识别会显示其内容 -->
<a href="test.zip">文本文件</a>

指定download属性下载:

<!--当超接遇到浏览器识别的资源时,默认不会下载,但是通过down1oad属性可进行下载-->
<a href="test.txt download">文本文件</a

download属性可以不写任何信息,会自动使用默认文件名,如果设置了download属性的值,则使用设置的
值做为文件名。当用户打开浏览器点击链接的时候就会直接下载文件。

后台实现下载

实现步骤:

  1. 需要同通过 response.setContentType 方法设置 Content-typpe 头字段的值,让浏览器无法使用某种方式或激活某个程序来处理的 MIME 类型,例如 "application/octet-stream" 或 "application/x-msdownload" 等。
  2. 需要通过 response.setHeader 方法设置 Content-Disposition 头的值为 "attachment;filename=文件名"。
  3. 读取需要下载的文件,调用 response.getOutputStream 方法向客户端写入附件内容。

代码演示:文章来源地址https://www.toymoban.com/news/detail-550296.html

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;

/**
 * @author: 86199
 * @date: 2023/7/3 17:07
 * Description: 后台代码实现文件下载
 */

@WebServlet("/downloadServlet")
public class DownloadServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("文件下载...");

        //设置请求编码
        req.setCharacterEncoding("UTF-8");

        //获取参数,获取要下载的文件名
        String fileName = req.getParameter("fileName");

        //trim() 去除字符串前后的空格
        if(fileName != null && "".equals(fileName.trim())){
            resp.setContentType("text/html;charset=UTF-8");
            resp.getWriter().write("请输入要下载的文件名");
            resp.getWriter().close();
            return;
        }

        //获取文件的存放路径
        String filePath = req.getServletContext().getRealPath("/download/");
        File file = new File(filePath + fileName);
        //判断文件是否存在,并且是一个标准文件
        if(file.exists() && file.isFile()){
            //设置响应类型为浏览器不能识别的
            resp.setContentType("application/x-msdownload");

            //设置响应头
            resp.setHeader("Content-Disposition", "attachment;filename=" + fileName);

            //得到文件输入流
            FileInputStream in = new FileInputStream(file);
            //得到字节输出流
            ServletOutputStream out = resp.getOutputStream();

            byte[] bytes = new byte[1024];
            int readLen = 0;
            while ((readLen = in.read(bytes)) != -1){
                out.write(bytes, 0, readLen);
            }
            in.close();
            out.close();

        }else {
            resp.setContentType("text/html;charset=UTF-8");
            resp.getWriter().write("文件不存在请重试...");
            resp.getWriter().close();
        }
    }
}

到了这里,关于Servlet p8 文件的上传和下载的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Servlet学习六】Cookie 与Session && 实现登录与上传文件

    目录 一、Cookie与Session(掌握) 🌈1、Cookie是什么? 🌈2、Session是什么? 二、代码功能演示 🌈1、实现登录功能(掌握) 🌈2、实现上传文件功能(掌握) 1、目标:实现程序,通过网页上传一张图片到服务器。 2、核心方法总结 问题1:为什么会有cookie?         HTTP协议

    2024年02月11日
    浏览(53)
  • 关于IDEA在写文件上传时,找不到javax.servlet.http.HttpServletRequest如何解决

            当我们在使用IDEA是,发现需要使用javax.servlet包下类时,IDEA无法识别类或是方法,会在控制台提示,无法找到javax.servlet.http.HttpServletRequest。此时我们需要按照一下的步骤进行导包即可。 1、选中项目所在的Module或工程名,右键单击Open Module Settings或者单击File——Pro

    2024年02月15日
    浏览(46)
  • SpringBoot+vue文件上传&下载&预览&大文件分片上传&文件上传进度

    SpringBoot+vue 大文件分片下载 Blob File spark-md5根据文件内容生成hash 大文件分片上传(批量并发,手动上传)vue组件封装-form组件 vue上传大文件/视频前后端(java)代码 springboot+vue自定义上传图片及视频 SpringBoot + VUE实现前台上传文件获取实时进度( 使用commons-fileupload设置上传监听

    2024年02月05日
    浏览(77)
  • 下载文件 + 上传文件

    记录一下js实现下载文件的方式 下载文件 方式一:a 链接下载:模拟a链接的点击,把后端返回的下载地址设置给a链接的href属性 2. 文件流下载 前端接收 type: “application/octet-stream“ 格式的数据并下载,还有后端既返回octet-stream还返回JSON数据时的处理方法, 后端改了一下文件下

    2024年02月12日
    浏览(55)
  • Failed to parse multipart servlet request; nested exception is java.io.IOException,文件上传异常的问题如何解决

    背景: 有时候我们上传文件时会遇到这种报错, \\\"Failed to parse multipart servlet request; nested exception is java.io.IOException: The temporary upload location [C:\\\\Users\\\\XXXX\\\\AppData\\\\Local\\\\Temp\\\\tomcat.2460390372185321891.8082\\\\work\\\\Tomcat\\\\localhost\\\\ROOT] is not valid\\\"。 导致上传文件失败。 原因: 这种问题出现的原

    2024年02月03日
    浏览(44)
  • 前端常用的上传下载文件的几种方式,直接上传、下载文件,读取.xlsx文件数据,导出.xlsx数据

    1.1根据文件流Blob进行下载 1.2根据下载文件链接直接进行下载 html

    2024年02月12日
    浏览(46)
  • 文件上传及oss简单上传及下载

    文件上传就是通过io流复制到浏览器的过程 快速实现文件上传功能 1.后台实现文件上传功能  定义controllere 定义serevice 文件上传不会直接上传真是的目录,它一定要经过一个临时目录的中转以后,才会上传到真是目录。作用: 防止上传出现网络断开,或者用户上传直接刷新或

    2023年04月09日
    浏览(40)
  • 【Postman】 测试文件上传、下载 一、使用PostMan测试文件上传接口

    1、、选择post请求方式,输入请求地址   二、填写Headers  一般是自动生成的 Key:Content-Type Value:multipart/form-data 如下图   三、填写body 选择form-data     然后选择文件file    点击添加文件,最后发送即可   1、反馈异常,先排查 Headers中 Conten-Type 与 ”文件类型“是否匹配  

    2024年02月11日
    浏览(63)
  • Flutter:文件上传与下载(下载后预览)

    dio是一个强大的Dart Http请求库,提供了丰富的功能和易于使用的API,支持文件上传和下载。 这个就不介绍了,网上有很多的封装案例。 简介 适用于iOS,Android,MacOS,Windows和Linux的后台文件下载器和上传器。 官方文档 https://pub-web.flutter-io.cn/packages/background_downloader 安装 注意:

    2024年02月13日
    浏览(64)
  • Selenium基础 — 文件上传&文件下载

    说明: 文件上传是web页面上很常见的一个功能,用脚本去实现文件上传很简单。 一般场景:在页面中的上传按钮是一个input标签,其中type属性为 type=\\\"file\\\" ,这种可以用selenium提供的 send_keys() 方法轻松解决。 示例: 页面代码片段: 脚本代码:  提示: 另外一种非input标签的

    2024年02月02日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包