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日

相关文章

  • 前台js对象在后台转化java对象的问题探讨

    前台js对象在后台转化java对象的问题探讨 当我们使用前后端分离的架构时,前台js对象与后台java对象之间需要进行转化。在这个过程中会遇到一些问题,如何解决这些问题呢?下面就来探讨一下这个问题。 第一步:前台js对象转化为后台json对象 前台js对象可以通过JSON.stringify()方法转化为json对象,具体操作如下: var jsObject…

    Java 2023年5月26日
    00
  • Spring Security自定义认证逻辑实例详解

    来详细讲解一下“Spring Security自定义认证逻辑实例详解”的完整攻略。 1. 概述 Spring Security是一个功能强大的安全框架,提供了包括认证、授权、攻击防范等在内的综合安全解决方案。在Spring Security中,认证是一个非常重要的环节。本攻略旨在详细讲解Spring Security中如何自定义认证逻辑。 2. 前置条件 在…

    Java 2023年5月20日
    00
  • JavaWeb实现学生管理系统的超详细过程

    JavaWeb实现学生管理系统的超详细过程 本文将着重对如何使用JavaWeb技术实现一个基本的学生管理系统进行详细讲解。本文将分别介绍系统需求分析、数据库设计、项目创建、前端页面设计、后端代码编写及测试等方面的知识点。 系统需求分析 首先,我们需要明确我们要实现的系统应该具备哪些功能。在本文的学生管理系统中,我们需要实现以下功能: 实现学生的增加、删除、修…

    Java 2023年5月20日
    00
  • Java实现发送手机短信语音验证功能代码实例

    下面是Java实现发送手机短信语音验证功能代码实例的完整攻略。 1. 准备工作 首先需要在云通讯官网https://www.yuntongxun.com/注册账号,然后创建应用,并获取相应的Account SID 和 Auth Token。同时还需要在应用中开通语音验证码功能,并记录下相应的模板ID。 2. 引入SDK 使用云通讯提供的Java SDK来发送…

    Java 2023年5月20日
    00
  • java开发之File类详细使用方法介绍

    Java开发之File类详细使用方法介绍 在Java开发中,File类是一个十分重要的类,它主要用于文件和目录的操作。在本文中,我们将详细介绍File类的各种使用方法,帮助读者更好地掌握Java文件和目录管理相关知识。 File类的基本用法 创建File对象 要操作文件或目录,首先需要创建File对象。有以下几种创建方法: // 创建一个文件 File fi…

    Java 2023年5月20日
    00
  • java压缩文件与删除文件的示例代码

    让我来介绍一下如何使用Java对文件进行压缩和删除。 压缩文件 Java中提供了zip压缩格式的支持,在使用时只需要使用java.util.zip包中的相关类即可。下面提供两个示例: 示例一:压缩单个文件 import java.io.*; import java.util.zip.*; public class ZipDemo { public stati…

    Java 2023年5月19日
    00
  • 浅谈servlet中的request与response

    关于“浅谈servlet中的request与response”,下面我来详细讲解一下。 什么是servlet中的request和response 在servlet中,request和response是指HTTP请求和响应中的对象,是Servlet API的一部分。这两个对象扮演了重要的角色,它们是处理HTTP请求和生成HTTP响应的必经之路。 具体而言,re…

    Java 2023年6月16日
    00
  • SpringBoot配置及使用Schedule过程解析

    Spring Boot 配置及使用 Schedule 过程解析 在本文中,我们将深入了解 Spring Boot 中的配置和使用 Schedule 的过程。我们将介绍 Spring Boot 的配置文件、配置属性、配置注解以及如何使用 Schedule 定时任务。 Spring Boot 配置文件 Spring Boot 的配置文件是一个名为 applica…

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