jsp中实现上传图片即时显示效果功能

要在JSP中实现上传图片即时显示效果的功能,可以采用以下步骤:

  1. 在JSP页面中添加上传文件表单和图片预览区域
<form action="upload.jsp" method="post" enctype="multipart/form-data">
  <input type="file" name="file" onchange="previewImage(this)">
  <div id="preview"></div>
  <input type="submit" value="上传">
</form>

其中,previewImage函数为JavaScript代码,用于将选中的图片实现即时预览效果,preview为显示预览区域的HTML元素。

  1. 在上传JSP页面中获取上传文件并保存到服务器
<%@ page import="java.io.*,java.util.*" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<%
String savePath = "upload/"; // 保存文件的路径
File fileSavePath = new File(savePath);
if (!fileSavePath.exists()) {
  fileSavePath.mkdir(); // 如果不存在该目录则创建
}

String imageName = ""; // 保存图片名称
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
List items = upload.parseRequest(request);
Iterator iter = items.iterator();
while (iter.hasNext()) {
  FileItem item = (FileItem) iter.next();
  if (!item.isFormField()) {
    String fileName = item.getName(); // 获取文件名
    fileName = fileName.substring(fileName.lastIndexOf("\\") + 1); // 截取文件名
    imageName = fileName;
    String filePath = savePath + fileName; // 保存的文件路径
    File uploadedFile = new File(filePath);
    item.write(uploadedFile); // 将文件保存到服务器
  }
}
%>
  1. 在上传JSP页面中输出上传成功信息及预览图片
<%
if (!imageName.equals("")) {
  out.println("上传成功!");
  out.println("<img src='" + savePath + imageName + "'/>"); // 输出预览图片
}
%>

其中,savePath为保存上传文件的路径,imageName为上传文件的名称。

示例1:上传图片保存到指定路径,并实现即时预览效果

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>Upload and Preview Image</title>
  <script>
    function previewImage(file) {
      var preview = document.getElementById('preview');
      var reader = new FileReader();
      reader.onload = function (e) {
        var img = new Image();
        img.src = e.target.result;
        img.className = 'preview-img';
        preview.appendChild(img);
      }
      reader.readAsDataURL(file.files[0]);
    }
  </script>
  <style>
    .preview-img {
      max-width: 200px;
      max-height: 200px;
      margin-right: 10px;
      margin-bottom: 10px;
    }
  </style>
</head>
<body>
  <form action="upload.jsp" method="post" enctype="multipart/form-data">
    <input type="file" name="file" onchange="previewImage(this)">
    <div id="preview"></div>
    <input type="submit" value="上传">
  </form>
</body>
</html>
<%@ page import="java.io.*,java.util.*" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<%
String savePath = "upload/"; // 保存文件的路径
File fileSavePath = new File(savePath);
if (!fileSavePath.exists()) {
  fileSavePath.mkdir(); // 如果不存在该目录则创建
}

String imageName = ""; // 保存图片名称
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
List items = upload.parseRequest(request);
Iterator iter = items.iterator();
while (iter.hasNext()) {
  FileItem item = (FileItem) iter.next();
  if (!item.isFormField()) {
    String fileName = item.getName(); // 获取文件名
    fileName = fileName.substring(fileName.lastIndexOf("\\") + 1); // 截取文件名
    imageName = fileName;
    String filePath = savePath + fileName; // 保存的文件路径
    File uploadedFile = new File(filePath);
    item.write(uploadedFile); // 将文件保存到服务器
  }
}
%>

<%
if (!imageName.equals("")) {
  out.println("上传成功!");
  out.println("<img src='" + savePath + imageName + "'/>"); // 输出预览图片
}
%>

示例2:上传图片并保存到MySQL数据库,实现即时预览效果

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>Upload and Preview Image</title>
  <script>
    function previewImage(file) {
      var preview = document.getElementById('preview');
      var reader = new FileReader();
      reader.onload = function (e) {
        var img = new Image();
        img.src = e.target.result;
        img.className = 'preview-img';
        preview.appendChild(img);
      }
      reader.readAsDataURL(file.files[0]);
    }
  </script>
  <style>
    .preview-img {
      max-width: 200px;
      max-height: 200px;
      margin-right: 10px;
      margin-bottom: 10px;
    }
  </style>
</head>
<body>
  <form action="upload.jsp" method="post" enctype="multipart/form-data">
    <input type="file" name="file" onchange="previewImage(this)">
    <div id="preview"></div>
    <input type="submit" value="上传">
  </form>
</body>
</html>
<%@ page import="java.io.*,java.util.*,java.sql.*" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="com.mysql.cj.jdbc.Driver" %>

<%
String savePath = "upload/"; // 保存文件的路径
File fileSavePath = new File(savePath);
if (!fileSavePath.exists()) {
  fileSavePath.mkdir(); // 如果不存在该目录则创建
}

String imageName = ""; // 保存图片名称
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
List items = upload.parseRequest(request);
Iterator iter = items.iterator();
while (iter.hasNext()) {
  FileItem item = (FileItem) iter.next();
  if (!item.isFormField()) {
    String fileName = item.getName(); // 获取文件名
    fileName = fileName.substring(fileName.lastIndexOf("\\") + 1); // 截取文件名
    imageName = fileName;
    String filePath = savePath + fileName; // 保存的文件路径
    File uploadedFile = new File(filePath);
    item.write(uploadedFile); // 将文件保存到服务器

    // 将图片保存到MySQL数据库
    String url = "jdbc:mysql://localhost:3306/test?serverTimezone=Asia/Shanghai&useSSL=false";
    String user = "root";
    String password = "root";
    Connection conn = null;
    PreparedStatement ps = null;
    try {
      Class.forName("com.mysql.cj.jdbc.Driver");
      conn = DriverManager.getConnection(url, user, password);
      String sql = "INSERT INTO images (name, content) VALUES (?, ?)";
      ps = conn.prepareStatement(sql);
      ps.setString(1, imageName);
      ps.setBinaryStream(2, new FileInputStream(uploadedFile), uploadedFile.length());
      ps.executeUpdate();
    } catch (Exception e) {
      e.printStackTrace();
    } finally {
      try {
        if (ps != null) {
          ps.close();
        }
        if (conn != null) {
          conn.close();
        }
      } catch (SQLException e) {
        e.printStackTrace();
      }
    }
  }
}
%>

<%
if (!imageName.equals("")) {
  out.println("上传成功!");
  // 从MySQL数据库中获取图片数据并输出预览图片
  String url = "jdbc:mysql://localhost:3306/test?serverTimezone=Asia/Shanghai&useSSL=false";
  String user = "root";
  String password = "root";
  Connection conn = null;
  PreparedStatement ps = null;
  ResultSet rs = null;
  try {
    Class.forName("com.mysql.cj.jdbc.Driver");
    conn = DriverManager.getConnection(url, user, password);
    String sql = "SELECT * FROM images WHERE name=?";
    ps = conn.prepareStatement(sql);
    ps.setString(1, imageName);
    rs = ps.executeQuery();
    if (rs.next()) {
      Blob blob = rs.getBlob("content");
      byte[] bytes = blob.getBytes(1, (int) blob.length());
      out.println("<img src='data:image/png;base64," + encodeToStr(bytes) + "'/>"); // 输出预览图片
    }
  } catch (Exception e) {
    e.printStackTrace();
  } finally {
    try {
      if (rs != null) {
        rs.close();
      }
      if (ps != null) {
        ps.close();
      }
      if (conn != null) {
        conn.close();
      }
    } catch (SQLException e) {
      e.printStackTrace();
    }
  }
}

// 将字节数组转换成Base64编码字符串
private String encodeToStr(byte[] bytes) {
  return new sun.misc.BASE64Encoder().encode(bytes);
}
%>

说明:示例2中通过将图片数据保存到MySQL数据库中来实现上传和预览。首先需要创建名为images的表,并添加namecontent两个字段。name保存图片名称,content保存图片数据。在JSP中保存图片数据时,使用ps.setBinaryStream方法将文件数据插入到content字段中;在从数据库中获取预览图片时,使用rs.getBlob方法获取content字段的数据,然后将其转换成Base64编码字符串,再将其设置为图片的src属性值。由于使用了MySQL的JDBC驱动包,所以需要在JSP页面中导入com.mysql.cj.jdbc.Driver类。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:jsp中实现上传图片即时显示效果功能 - Python技术站

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

相关文章

  • 详解SpringBoot+Mybatis实现动态数据源切换

    详解SpringBoot+Mybatis实现动态数据源切换 在本文中,我们将详细讲解如何使用SpringBoot和Mybatis实现动态数据源切换。动态数据源切换是指在运行时根据需要切换数据源,而不是在应用程序启动时指定数据源。这种技术可以帮助我们更好地管理多个数据源,并提高应用程序的性能和可扩展性。 环境准备 在开始本文之前,我们需要准备好以下环境: JD…

    Java 2023年5月18日
    00
  • springboot+kafka中@KafkaListener动态指定多个topic问题

    使用SpringBoot和Kafka进行消息传输时,可以使用@KafkaListener注解来监听指定的topic,然而在一些情况下需要动态指定多个topic。下面是在SpringBoot中实现动态指定多个topic的攻略: 使用ContainerProperties的方法 需要在代码中手动创建一个KafkaMessageListenerContainer容…

    Java 2023年5月20日
    00
  • Spring MVC中使用Controller如何进行重定向

    在 Spring MVC 中,我们可以使用 Controller 进行重定向。重定向是指将用户请求重定向到另一个 URL,通常用于处理表单提交后的页面跳转。本文将详细讲解 Spring MVC 中使用 Controller 进行重定向的完整攻略,包括如何使用 RedirectAttributes 和 ModelAndView 两种方式进行重定向,并提供两个示…

    Java 2023年5月18日
    00
  • javaweb登录验证码的实现方法

    下面是“JavaWeb登录验证码的实现方法”的详细攻略: 什么是验证码 验证码(Verification Code)是一种用于判断用户是否为人类的简单程序,主要目的是防止恶意程序对网站进行暴力破解或网络爬虫行为。常见的验证码包括数字、字母、图片、数学公式等形式,验证码输入错误时,通常会跳出提示框要求重新输入。 JavaWeb登录验证码的实现方法 JavaWe…

    Java 2023年6月15日
    00
  • Java中典型的内存泄露问题和解决方法

    下面是Java中典型的内存泄漏问题和解决方法的完整攻略。 什么是内存泄漏 内存泄漏是指在程序运行过程中,程序动态分配的内存没有被妥善的回收或释放,导致内存的消耗持续增加的一种缺陷。 通常情况下,内存泄漏的问题是比较严重的,它可能导致应用程序的性能下降或者崩溃等问题。 在Java中,当一个不再需要的对象占据了内存却没有被回收时,将会出现内存泄漏的情况。 典型的…

    Java 2023年5月27日
    00
  • SpringBoot定时任务设计之时间轮案例原理详解

    SpringBoot定时任务设计之时间轮案例原理详解 本文将详细介绍SpringBoot定时任务设计之时间轮案例,讲解时间轮的基本原理和实现方式,以及如何在SpringBoot中实现定时任务的调度。 基本原理 时间轮是一种常见的定时任务调度算法,它的基本原理是将时间线性化,并按照固定的时间间隔划分成若干个时间槽,将任务按照配合它触发时间所在的时间槽进行存储和…

    Java 2023年5月20日
    00
  • Spring boot从安装到交互功能实现零基础全程详解

    Spring boot从安装到交互功能实现零基础全程详解 本文将详细讲解如何从零开始安装和使用Spring Boot,以及如何实现基本的交互功能,让你从零基础到实现一个Spring Boot应用项目。 安装 首先,你需要安装Java和Maven。 安装Java 访问Oracle官网,下载并安装最新版本的JDK。 安装Maven 访问Apache Maven官…

    Java 2023年5月15日
    00
  • Spring-Validation 后端数据校验的实现

    下面我将为你详细讲解如何使用Spring-Validation实现后端数据校验的攻略。 什么是Spring-Validation? Spring-Validation是Spring框架中的一部分,可以用来实现后端的数据校验。它提供了很多常见的校验规则,也允许我们自定义校验规则。 Spring-Validation 的使用 引入依赖 首先,我们需要在pom.x…

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