jsp+servlet简单实现上传文件功能(保存目录改进)

下面我会详细讲解“jsp+servlet简单实现上传文件功能(保存目录改进)”的完整攻略。

1. 基本介绍

在Java Web开发中,如果需要实现文件上传功能,可以使用jsp+servlet技术实现。具体实现过程中需要用到JDK提供的multipart/form-data类型数据处理方式。下面我们来看看如何实现。

2. 实现步骤

  • 一、创建html页面,页面中包含一个表单,用于上传文件,表单中需要指定form表单的enctype为multipart/form-data。

示例代码:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>文件上传</title>
</head>
<body>
<form action="FileUploadServlet" method="post" enctype="multipart/form-data">
    <input type="file" name="f">
    <input type="submit" value="上传">
</form>
</body>
</html>

注意:form表单action中的FileUploadServlet是一个后台servlet的路径,需要在后台中对应的servlet中处理文件上传请求。

  • 二、在后台servlet中创建一个实现javax.servlet.http.Part接口的文件上传处理类,用于处理文件上传请求的中间件:

示例代码:

package com.example.servlet;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.UUID;
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;

@WebServlet("/FileUploadServlet")
@MultipartConfig(
        fileSizeThreshold = 1024 * 1024,
        maxFileSize = 1024 * 1024 * 5,
        maxRequestSize = 1024 * 1024 * 20,
        location = "E:/file/"
)
public class FileUploadServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Part part = request.getPart("f");
        if (part != null && part.getSize() > 0) {
            InputStream inputStream = part.getInputStream();
            String fileName = part.getSubmittedFileName();
            String fileSuffix = fileName.substring(fileName.lastIndexOf("."));
            String uuid = UUID.randomUUID().toString().replace("-", "");
            fileName = uuid + fileSuffix;
            String uploadPath = getServletContext().getRealPath("") + File.separator + "file" + File.separator + fileName;
            Files.copy(inputStream, Paths.get(uploadPath));
            part.delete();
        }
    }
}

以上示例代码中的MultipartConfig注解用于设置文件上传相关参数:

  • fileSizeThreshold:最大缓冲区缓存大小,默认为0,即不缓存。
  • maxFileSize:最大文件上传大小。
  • maxRequestSize:最大请求大小。
  • location:上传文件的保存路径。如果不指定该值,则会默认保存在tomcat临时目录中。

  • 三、运行该项目,访问前台上传文件页面,上传一个大小小于5MB的文件。在实现的例子中,上传的文件将会被存储在E:/file/目录下。

3. 注意事项

  • 1.表单需要设置enctype为multipart/form-data。
  • 2.实现servlet需要使用javax.servlet.http.Part接口,它是Servlet 3.0规范引入的新特性,所以需要使用Servlet 3.0或以上的版本。
  • 3.通过getServletContext().getRealPath("")获取的是该项目在tomcat中的真实路径。在实际开发中,路径应该设置为可配置(例如:写入配置文件或者通过配置文件等方式对外提供),以便部署在其他tomcat服务器上时可以方便地修改该路径。

4. 示例说明

下面两个示例,分别演示了如何实现多文件上传和跨域上传。

示例一:多文件上传示例

在前台页面中添加多个文件上传框,修改servlet的处理代码部分,实现批量文件上传功能。

示例代码:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>文件上传</title>
</head>
<body>
<form action="FileUploadServlet" method="post" enctype="multipart/form-data">
    <input type="file" name="f1"><br>
    <input type="file" name="f2"><br>
    <input type="file" name="f3"><br>
    <input type="submit" value="上传">
</form>
</body>
</html>
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    String uploadPath = getServletContext().getRealPath("") + File.separator + "file" + File.separator;
    Collection<Part> parts = request.getParts();
    for (Part part : parts) {
        if (part != null && part.getSize() > 0) {
            InputStream inputStream = part.getInputStream();
            String fileName = part.getSubmittedFileName();
            String fileSuffix = fileName.substring(fileName.lastIndexOf("."));
            String uuid = UUID.randomUUID().toString().replace("-", "");
            fileName = uuid + fileSuffix;
            Files.copy(inputStream, Paths.get(uploadPath + fileName));
            part.delete();
        }
    }
}

示例二:跨域上传示例

在前台页面中添加一个可跨域上传的文件上传框,修改servlet的处理代码部分,实现跨域上传功能。

示例代码:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>文件上传</title>
</head>
<body>
<form action="FileUploadServlet" method="post" enctype="multipart/form-data">
    <input type="file" name="f"><br>
    <input type="hidden" name="callback" value="http://localhost:8080/crossDomainTest.html">
    <input type="submit" value="上传">
</form>
</body>
</html>

注意:在跨域上传中,需要在form表单中添加一个隐藏的callback参数,用于返回上传结果。

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    String uploadPath = "E:/file/";
    Part part = request.getPart("f");
    if (part != null && part.getSize() > 0) {
        InputStream inputStream = part.getInputStream();
        String fileName = part.getSubmittedFileName();
        String fileSuffix = fileName.substring(fileName.lastIndexOf("."));
        String uuid = UUID.randomUUID().toString().replace("-", "");
        fileName = uuid + fileSuffix;
        String uploadFilePath = uploadPath + fileName;
        Files.copy(inputStream, Paths.get(uploadFilePath));
        part.delete();
        String callbackUrl = request.getParameter("callback");
        response.setContentType("application/json;charset=utf-8");
        PrintWriter out = response.getWriter();
        out.print("{\"code\": 0, \"info\": \"success\", \"fileName\": \"" + fileName + "\", \"fileUrl\": \"" + uploadFilePath + "\", \"callback\": \"" + callbackUrl + "\"}");
        out.flush();
        out.close();
    }
}

在处理上传文件成功后,需要向前台返回一个json格式的信息,包含上传结果等详细信息。

以上就是“jsp+servlet简单实现上传文件功能(保存目录改进)”的完整攻略。希望对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:jsp+servlet简单实现上传文件功能(保存目录改进) - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • JavaScript中valueOf函数与toString方法深入理解

    JavaScript中valueOf函数与toString方法深入理解 JavaScript中的对象可以通过自身的函数或方法转换为原始值。其中,valueOf函数和toString方法都可以用来实现此目的。本文将深入探讨valueOf函数与toString方法的区别、使用场景、如何自定义和优先级等问题,并通过示例说明它们的使用方法。 区别 valueOf v…

    JavaScript 2023年5月27日
    00
  • JSON 对象未定义错误的解决方法

    JSON 对象未定义错误指的是在 JavaScript 中使用 JSON.parse() 方法解析字符串时出现的错误,该错误通常是由于字符串格式不正确或 JSON 对象中缺少属性导致的。以下是解决该错误的攻略: 1. 检查字符串格式 首先,我们需要检查使用 JSON.parse() 方法时传入的字符串格式是否正确。JSON 格式要求属性名必须加双引号,属性值…

    JavaScript 2023年5月27日
    00
  • JavaScript判断数组是否包含指定元素的方法

    判断一个数组是否包含指定元素,是 JavaScript 常见的问题之一。下面是几种实现此功能的方法: 方法一:利用 Array.prototype.includes() ES6 中,新增了 Array.prototype.includes() 方法,此方法可以判断一个数组是否包含指定元素。示例代码如下: const array = [1, 2, 3, 4, …

    JavaScript 2023年5月27日
    00
  • JS实现将数据导出到Excel的方法详解

    下面是“JS实现将数据导出到Excel的方法详解”的完整攻略。 一、介绍 在开发过程中,我们经常需要将数据导出到Excel,并进一步进行处理或者查看。有多种方法可以实现数据导出到Excel,其中一种常用的方法就是使用JavaScript。JavaScript可以生成表格,并将其转化为Excel文件,然后自动下载到本地。本文将分步讲解如何使用JavaScrip…

    JavaScript 2023年5月19日
    00
  • JavaScript 封装Ajax传递的数据代码

    当我们需要使用Ajax进行数据传递时,通过JavaScript封装以实现数据传递是非常常见的做法。下面是一份完整的JavaScript封装Ajax传递数据的攻略。 攻略步骤 创建一个XMLHttpRequest对象 使用JavaScript中的XMLHttpRequest对象,用于与服务器进行交互。可以通过new XMLHttpRequest()方法来创建一…

    JavaScript 2023年6月1日
    00
  • javascript 特性检测并非浏览器检测

    JavaScript特性检测是一种技术,用于检测一个网站或应用程序是否支持所需的特定JavaScript特性。与浏览器检测不同,它测试一个特定的功能是否可用,而浏览器检测则简单地表明用户使用的浏览器。 下面是进行JavaScript特性检测的攻略: 步骤 1.判断所需功能是否可用: 首先,确定您需要的功能是否可用。这通常涉及询问JavaScript环境的功能…

    JavaScript 2023年6月11日
    00
  • JS运动特效之完美运动框架实例分析

    下面是详细讲解完美运动框架实例分析的攻略: JS运动特效之完美运动框架实例分析 一、简介 完美运动框架是一款优秀的JS运动特效库,可以实现多种运动效果,如匀速运动、缓冲运动等等。本篇文章将从实例分析的角度出发,介绍完美运动框架的常规用法以及一些细节问题。 二、常规用法 1. 引入完美运动框架 完美运动框架是一个单独的JS文件,需要在HTML文件中引入才能使用…

    JavaScript 2023年6月11日
    00
  • JavaScript优化以及前段开发小技巧

    JavaScript 优化以及前端开发小技巧 1. JavaScript 优化 1.1 减少 HTTP 请求 当页面中存在大量的 HTTP 请求时,可能导致页面加载缓慢。因此需要考虑如何减少页面中的 HTTP 请求,以提高网页加载速度。以下几种方法可以用来减少 HTTP 请求: 使用 CSS Sprite:将多张图片整合到一张图中,减少HTTP请求次数。 合…

    JavaScript 2023年5月18日
    00
合作推广
合作推广
分享本页
返回顶部