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日

相关文章

  • 解决idea2020.1找不到程序包和符号的问题

    问题背景: 在使用IntelliJ IDEA 2020.1时,有时会遇到找不到程序包和符号的问题。这个问题可能是由于项目依赖导致的,也可能是由于代码中的语法错误导致的。 解决方案: 检查项目依赖 首先,需要检查项目的依赖是否正确。在项目的pom.xml文件(Maven项目)或build.gradle文件(Gradle项目)中查看所依赖的库是否正确且版本是否匹…

    Java 2023年5月20日
    00
  • mybatis-plus主键生成策略

    mybatis-plus主键生成策略可以通过注解或配置文件进行设置,下面将详细讲解。 1. 注解方式设置主键生成策略 在实体类中使用@TableId注解可以设置主键生成方式。其属性type表示主键生成类型,取值范围为枚举类IdType中的枚举值,包括AUTO、NONE、INPUT、ID_WORKER、UUID、ID_WORKER_STR。其中,ID_WORK…

    Java 2023年5月19日
    00
  • Java基于jdbc连接mysql数据库操作示例

    下面是Java基于JDBC连接MySQL数据库操作的完整攻略,包含两条示例。 步骤一:准备工作 在开始Java程序连接MySQL数据库之前,需要完成以下几个准备工作: 安装MySQL数据库并创建需要操作的数据库和表 下载并安装Java JDK 下载并安装MySQL Connector/J驱动程序 步骤二:创建数据库连接 请按照以下步骤创建数据库连接: 加载M…

    Java 2023年5月19日
    00
  • Java实现远程控制技术完整源代码分享

    Java实现远程控制技术完整源代码分享 概述 远程控制技术是指可以通过网络远程控制另一台电脑。而 Java 实现远程控制则是一种基于 Java 技术实现远程控制的方法,可以使得用户在任意位置使用电脑远程控制被控制的电脑,非常实用。 在此,本文将会为大家讲解 Java 实现远程控制技术的完整攻略,并且分享完整的源代码。 技术准备 在开始编写完整的源代码之前,需…

    Java 2023年5月19日
    00
  • JSP连接Access数据库

    JSP连接Access数据库的过程可以分为以下几个步骤: 1. 安装Access驱动程序 在JSP连接Access数据库之前需要先安装Microsoft Access数据库驱动程序,可以从Microsoft官网下载,并按照说明进行安装。 2. 导入Access数据库到项目中 在JSP项目中创建一个lib文件夹,将Microsoft Access数据库驱动程序…

    Java 2023年6月15日
    00
  • 详解Java中字符串缓冲区StringBuffer类的使用

    详解Java中字符串缓冲区StringBuffer类的使用 概述 在Java中,字符串是一种非常常用的数据类型。不过,我们在使用字符串时,有以下几方面的注意点: 字符串的不可变性:Java中的字符串是不可变的,也就是说,一旦创建了一个字符串,就无法修改其中的内容,只能通过重新创建一个新的字符串来达到修改的目的; 字符串拼接:在实际开发中,经常会遇到需要将两个…

    Java 2023年5月26日
    00
  • Java面试题冲刺第三天–集合框架篇

    让我来为您详细讲解“Java面试题冲刺第三天–集合框架篇”的完整攻略。 一、前言 集合框架是Java编程中的重要一环,作为Java工程师,在面试中对集合框架要有深刻的理解。本篇文章将为您提供Java集合框架面试题的完整攻略,帮助您在面试中脱颖而出。 二、集合框架概述 集合框架是Java中的一组接口、实现类和算法,用于存储和操作一组对象。在Java编程中,集…

    Java 2023年5月19日
    00
  • Spring Boot 简介(入门篇)

    SpringBoot简介(入门篇) 什么是SpringBoot Spring Boot 是一个用于快速创建 Spring 应用程序的框架。它基于 Spring 框架,遵循“约定优于配置”的原则,提供了很多默认配置,简化了 Spring 应用程序的开发过程。 SpringBoot的优点 快速开发: Spring Boot 可以快速创建独立运行的 Spring …

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