广告
返回顶部
首页 > 资讯 > 后端开发 > Python >JavaWeb Servlet实现文件上传与下载功能实例
  • 549
分享到

JavaWeb Servlet实现文件上传与下载功能实例

2024-04-02 19:04:59 549人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录前言项目准备文件上传前台页面文件下载资源准备超链接下载后台实现下载总结前言 在上网的时候我们常常遇到文件上传的情况,例如上传头像、上传资料等;当然除了上传,遇见下载的情况也很多,

前言

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

项目准备

idea:2020.1

jdk:1.8

Tomcat:10

项目模板:java Enterprise–>WEB Application

文件上传

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

前台页面

在做文件上传的时候,会有一个上传文件的界面,首先我们需要一个表单,并且表单的请求方式为 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.设置文件提交地址 action地址需要和后台servlet注解保持一致
    5.准备表单元素
    6.设置表单元素的name属性值(否则后台无法接收数据)
-->
<form method="post" enctype="multipart/form-data" action="upLoadServlet">
    姓名:<input type="text" name="uname"><br>
    文件:<input type="file" name="myfile"><br>
    <!--button默认时提交类型 type="submit"-->
    <button>提交</button>
</form>

</body>
</html>

后台实现

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

package formServlet;

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.MultipartConfig;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.Http.httpservlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.Part;

import java.io.IOException;


@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对象
        Part part=req.getPart("myfile");
        //通过part对象获得上传文件名
        String fileName = part.getSubmittedFileName();
        System.out.println("file:"+fileName);
        //得到文件存放路径
        String filePath = req.getServletContext().getRealPath("/");
        System.out.println("filePath:"+filePath);
        //上传文件到指定路径
        part.write(filePath+"/"+fileName);
    }
}

提交表单后查看控制台打印结果

文件上传
uname:张三
file:exception.jpg
filePath:E:\bdqn\javaweb\servlet\out\artifacts\servlet_war_exploded\

文件下载

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

资源准备

在web目录下新建文件夹存放下载资源,通过tomcat配置添加Deployment到服务器中

超链接下载

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

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>文件下载</title>
</head>
<body>
<!--
超链接下载
        1.当时用超链接(a标签)时,如果遇到浏览器能够识别的内容,会显示内容,而不会进行下载.
         指定download属性进行下载;

        2.如果遇到浏览器不能识别的内容,会进行下载
-->
<!--浏览器能够识别的资源,显示内容-->
<a href="download/1.txt">文本文件</a>
<a href="download/retrun.jpg">图片文件</a>
<!--压缩文件是浏览器不能识别的资源,进行下载-->
<a href="download/1.zip">压缩文件</a>
<!--浏览器能够识别的资源,设置download属性,进行下载-->
<!--download="文件名.后缀名",不设置文件名和后缀名会默认服务器中的文件属性-->
<a href="download/1.txt" download>文本文件下载</a>
<a href="download/retrun.jpg" download="re.png">图片文件下载</a>

</body>
</html>

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

后台实现下载

实现步骤

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

import jakarta.servlet.ServletException;
import jakarta.servlet.ServletOutputStream;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;


@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");
        resp.setContentType("text/html;charset=UTF-8");
        //获取参数(下载文件名)
        String fileName = req.getParameter("fileName");
        System.out.println(fileName);
        //参数非空判断 trim():去除字符串的前后空格
        if(fileName==null||"".equals(fileName.trim())){
            //参数为空,写入浏览器提示
            resp.getWriter().write("请输入要下载的文件名!");
            resp.getWriter().close();  //关闭流
            return; //退出当前
        }
        //得到文件存放路径
        String filePath=req.getServletContext().getRealPath("/download/");
        //通过路径得到file对象
        File file = new File(filePath + fileName);
        //判断文件对象是否存在并且是标准文件
        if(file.exists()&&file.isFile()){
            //设置响应类型(浏览器无法使用某种方式或激活某个程序来处理的 MIME 类型)
            resp.setContentType("application/x-msdownload");
            //设置响应头
            resp.setHeader("Context-Disposition","attachment;filename="+fileName);
            //得到file文件输入流
            FileInputStream fis = new FileInputStream(file);
            //得到字节输出流
            ServletOutputStream sos=resp.getOutputStream();
            //定义byte数组
            byte[] bytes=new byte[1024];
            //定义长度
            int len=fis.read(bytes);
            //循环输出
            while (len!=-1){
                sos.write(bytes,0,len);
            }
            //关闭资源 先打开的后关闭
            sos.close();
            fis.close();
        }else {
            resp.getWriter().write("文件不存在,请重试!");
            resp.getWriter().close();
        }
    }
}

总结

到此这篇关于JavaWeb Servlet实现文件上传与下载功能的文章就介绍到这了,更多相关JavaWeb Servlet文件上传下载内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: JavaWeb Servlet实现文件上传与下载功能实例

本文链接: https://www.lsjlt.com/news/147712.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • JavaWeb Servlet实现文件上传与下载功能实例
    目录前言项目准备文件上传前台页面文件下载资源准备超链接下载后台实现下载总结前言 在上网的时候我们常常遇到文件上传的情况,例如上传头像、上传资料等;当然除了上传,遇见下载的情况也很多,...
    99+
    2022-11-13
  • servlet实现文件上传与下载功能
    本文实例为大家分享了servlet实现文件上传与下载的具体代码,供大家参考,具体内容如下 内容 我们分两大模块来进行讲解,即上传的实现,与下载的实现 上传的实现 注意了我们在写上传表...
    99+
    2022-11-11
  • Servlet如何实现文件的上传与下载功能
    这篇文章给大家分享的是有关Servlet如何实现文件的上传与下载功能的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。实现条件:需要一个form标签,method为post请求2、form的encType属性值为mu...
    99+
    2023-06-14
  • Servlet实现文件的上传与下载
    前言: 文件的上传和下载在日常开发中很是常见,那么这一功能是如何实现的呢,下面我给大家介绍一下 实现条件: 1、需要一个form标签,method为post请求 2、form的enc...
    99+
    2022-11-11
  • JavaWeb实现文件的上传与下载
    JavaWeb实现文件的上传与下载,供大家参考,具体内容如下 第一步:导包 导入commons-fileupload-1.3.3.jar和commons-io-2.4.jar两个依赖...
    99+
    2022-11-12
  • JavaWeb是如何实现文件上传和下载功能
    这篇文章将为大家详细讲解有关JavaWeb是如何实现文件上传和下载功能,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1. 文件传输原理及介绍2. JavaWeb文件上传2.1我们用一个新的方...
    99+
    2023-06-22
  • Servlet文件的上传与下载怎么实现
    本文小编为大家详细介绍“Servlet文件的上传与下载怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“Servlet文件的上传与下载怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。文件的上传和下载1...
    99+
    2023-07-02
  • javaweb实现文件上传功能
    本文实例为大家分享了javaweb实现文件上传的具体代码,供大家参考,具体内容如下 1、创建一个空项目 2、新建一个web application 的Module 3、创建一个lib...
    99+
    2022-11-13
  • JavaWeb实现上传文件功能
    本文实例为大家分享了JavaWeb实现上传文件的具体代码,供大家参考,具体内容如下 这是需要使用到的两个jar包一定要导入到lib目录中,并添加到发布的lib目录下 index.j...
    99+
    2022-11-13
  • 详解JavaWeb如何实现文件上传和下载功能
    目录1.文件传输原理及介绍2.JavaWeb文件上传2.1我们用一个新的方式创建项目2.2导包2.3实用类介绍2.4pom.xml导入需要的依赖2.5index.jsp2.6info...
    99+
    2022-11-12
  • JavaWeb实现文件上传和下载接口功能详解
    目录1.上传java代码实现2.文件流下载java代码实现3.Fileutil工具类代码1.上传java代码实现 @ResponseBody @PostMapping...
    99+
    2022-12-27
    Java Web文件上传下载 Java Web文件上传 Java Web文件下载 Java 文件上传下载
  • Servlet实现文件下载功能
    本文实例为大家分享了Servlet实现文件下载的具体代码,供大家参考,具体内容如下把文件目录直接暴露给用户是很不安全的。所以要用Servlet来做,而且这样做,文件的存储方式就更丰富了,可以是从文件系统上取来的,也可以是数据库中经过计算生成...
    99+
    2023-05-30
    servlet 文件下载 实现文件
  • 利用servlet怎么实现一个文件上传下载功能
    利用servlet怎么实现一个文件上传下载功能?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一、准备工作:  1.1 文件上传插件:uploadify;  1.2 文件上传所需...
    99+
    2023-05-31
    servlet 一个文件
  • JavaWeb 文件的上传和下载功能简单实现代码
    一、文件的上传和下载1、文件上传的原理分析     1、文件上传的必要前提:          a、提供for...
    99+
    2023-05-31
    java web 文件上传
  • javaweb实现文件上传小功能
    本文实例为大家分享了javaweb实现文件上传的具体代码,供大家参考,具体内容如下 1.创建文件上传页面 <%@ page contentType="text/html;cha...
    99+
    2022-11-13
  • JavaWeb中上传和下载文件实例代码
    一丶先引入上传下载的lib二丶上传的的servletpackage com.test.action;import java.io.File;import java.io.FileOutputStream;import java.io.IOE...
    99+
    2023-05-31
    javaweb 上传下载 ava
  • SpringBoot实现文件上传与下载功能的示例代码
    目录Spring Boot文件上传与下载举例说明1.引入Apache Commons FileUpload组件依赖2.设置上传文件大小限制3.创建选择文件视图页面4.创建控制器5.创...
    99+
    2022-11-13
  • SpringBoot文件上传与下载功能实现详解
    目录前言1、引入Apache Commons FileUpload组件依赖2、设置上传文件大小限制3、创建选择文件视图页面4、创建控制器5、创建文件下载视图页面前言 文件上传与下载是...
    99+
    2022-11-13
    SpringBoot文件上传 SpringBoot文件下载
  • SpringBoot怎么实现文件上传与下载功能
    这篇“SpringBoot怎么实现文件上传与下载功能”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“SpringBoot怎么实...
    99+
    2023-07-06
  • SpringBoot如何实现文件上传与下载功能
    今天小编给大家分享一下SpringBoot如何实现文件上传与下载功能的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Sprin...
    99+
    2023-07-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作