Java实战之实现文件资料上传并生成缩略图

下面我将详细讲解“Java实战之实现文件资料上传并生成缩略图”的完整攻略。

目录

  • 资料上传的步骤
  • 生成缩略图的步骤
  • 示例一:使用Spring MVC实现文件上传
  • 示例二:使用Apache Commons FileUpload实现文件上传

资料上传的步骤

  1. 在前端页面上添加文件上传表单,并设置相应的属性。
<form action="#" method="POST" enctype="multipart/form-data">
  <input type="file" name="file">
  <button type="submit">提交</button>
</form>
  1. 在服务器端接收上传的文件,可以使用Spring MVC框架或Apache Commons FileUpload组件等。

  2. 对文件进行处理(例如重命名、存储到指定目录等)。

  3. 返回上传结果给前端页面。

生成缩略图的步骤

  1. 使用Java自带的ImageIO类加载上传的图片。
File file = new File("path/to/image.jpg");
BufferedImage img = ImageIO.read(file);
  1. 调整图片尺寸。
int width = img.getWidth();
int height = img.getHeight();
int newWidth = 100; // 新的宽度
int newHeight = height * newWidth / width; // 新的高度按比例计算
Image scaledImage = img.getScaledInstance(newWidth, newHeight, Image.SCALE_SMOOTH);
  1. 保存缩略图至指定目录。
BufferedImage thumbnail = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = thumbnail.createGraphics();
g2d.drawImage(scaledImage, 0, 0, null);
g2d.dispose();

File thumbnailFile = new File("path/to/thumbnail.jpg");
ImageIO.write(thumbnail, "jpg", thumbnailFile);
  1. 返回缩略图文件名或URL。

示例一:使用Spring MVC实现文件上传

  1. 在pom.xml中添加依赖。
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-web</artifactId>
  <version>5.3.10</version>
</dependency>
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-webmvc</artifactId>
  <version>5.3.10</version>
</dependency>
  1. 添加上传文件的Controller。
@Controller
public class UploadController {
  @RequestMapping(value = "/upload", method = RequestMethod.POST)
  public String upload(@RequestParam("file") MultipartFile file, ModelMap model) throws IOException {
    String originalFilename = file.getOriginalFilename();
    String extension = FileUtils.getFileExtension(originalFilename);
    String newName = UUID.randomUUID().toString() + "." + extension;
    File newFile = new File("path/to/uploaded/" + newName);
    file.transferTo(newFile);

    BufferedImage img = ImageIO.read(newFile);
    int width = img.getWidth();
    int height = img.getHeight();
    int newWidth = 100;
    int newHeight = height * newWidth / width;
    Image scaledImage = img.getScaledInstance(newWidth, newHeight, Image.SCALE_SMOOTH);

    BufferedImage thumbnail = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_INT_ARGB);
    Graphics2D g2d = thumbnail.createGraphics();
    g2d.drawImage(scaledImage, 0, 0, null);
    g2d.dispose();

    String thumbnailName = UUID.randomUUID().toString() + ".jpg";
    File thumbnailFile = new File("path/to/thumbnails/" + thumbnailName);
    ImageIO.write(thumbnail, "jpg", thumbnailFile);

    model.addAttribute("thumbnail", "/thumbnails/" + thumbnailName);
    return "result";
  }
}
  1. 添加前端页面。
<!DOCTYPE html>
<html>
<head>
  <title>文件上传示例</title>
</head>
<body>
  <h1>文件上传示例</h1>
  <form action="/upload" method="POST" enctype="multipart/form-data">
    <input type="file" name="file">
    <button type="submit">提交</button>
  </form>
  <hr>
  <img src="${thumbnail}" alt="缩略图">
</body>
</html>

示例二:使用Apache Commons FileUpload实现文件上传

  1. 在pom.xml中添加依赖。
<dependency>
  <groupId>commons-fileupload</groupId>
  <artifactId>commons-fileupload</artifactId>
  <version>1.4</version>
</dependency>
  1. 添加上传文件的Servlet。
@WebServlet(name = "FileUploadServlet", urlPatterns = {"/upload"})
@MultipartConfig
public class FileUploadServlet extends HttpServlet {
  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    FileItemFactory factory = new DiskFileItemFactory();
    ServletFileUpload upload = new ServletFileUpload(factory);

    try {
      List<FileItem> items = upload.parseRequest(request);
      Iterator<FileItem> iter = items.iterator();
      while (iter.hasNext()) {
        FileItem item = iter.next();
        if (!item.isFormField() && StringUtils.isNotBlank(item.getName())) {

          String originalFilename = item.getName();
          String extension = FileUtils.getFileExtension(originalFilename);
          String newName = UUID.randomUUID().toString() + "." + extension;
          File newFile = new File("path/to/uploaded/" + newName);
          item.write(newFile);

          BufferedImage img = ImageIO.read(newFile);
          int width = img.getWidth();
          int height = img.getHeight();
          int newWidth = 100;
          int newHeight = height * newWidth / width;
          Image scaledImage = img.getScaledInstance(newWidth, newHeight, Image.SCALE_SMOOTH);

          BufferedImage thumbnail = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_INT_ARGB);
          Graphics2D g2d = thumbnail.createGraphics();
          g2d.drawImage(scaledImage, 0, 0, null);
          g2d.dispose();

          String thumbnailName = UUID.randomUUID().toString() + ".jpg";
          File thumbnailFile = new File("path/to/thumbnails/" + thumbnailName);
          ImageIO.write(thumbnail, "jpg", thumbnailFile);

          response.setContentType("text/html;charset=UTF-8");
          response.getWriter().write("/thumbnails/" + thumbnailName);
        }
      }
    } catch (Exception ex) {
      response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
      response.getWriter().write(ex.getMessage());
    }
  }
}
  1. 添加前端页面。
<!DOCTYPE html>
<html>
<head>
  <title>文件上传示例</title>
</head>
<body>
  <h1>文件上传示例</h1>
  <form action="/upload" method="POST" enctype="multipart/form-data">
    <input type="file" name="file">
    <button type="submit">提交</button>
  </form>
  <hr>
  <img id="thumbnail" src="" alt="缩略图" style="display: none">
  <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.slim.min.js"></script>
  <script>
    $(function () {
      $('form').submit(function (event) {
        event.preventDefault();
        var formData = new FormData(this);
        $.ajax({
          url: '/upload',
          type: 'POST',
          data: formData,
          processData: false,
          contentType: false,
          success: function (data) {
            $('#thumbnail').attr('src', data);
            $('#thumbnail').show();
          },
          error: function (jqXHR, textStatus, errorThrown) {
            alert('上传失败:' + errorThrown);
          }
        });
      });
    });
  </script>
</body>
</html>

以上就是“Java实战之实现文件资料上传并生成缩略图”的完整攻略,希望能够对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java实战之实现文件资料上传并生成缩略图 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • jsp+mysql实现网页的分页查询

    好的。要详细讲解“jsp+mysql实现网页的分页查询”的完整攻略,需要了解以下几个步骤。 第一步:建立数据库 首先,在mysql中建立我们需要的数据库,并创建一个表来存储数据。例如,创建一个学生表students,表中包括学号、姓名、性别、年龄等字段。 表的创建语句如下: CREATE TABLE `students` ( `id` int(11) NOT…

    Java 2023年6月15日
    00
  • java实现读取、删除文件夹下的文件

    关于Java实现读取、删除文件夹下的文件的攻略,可以分为两个步骤:读取和删除文件。 1. 读取文件 Java中读取文件需要使用File类,它提供了各种方法来处理文件和文件夹。使用File类的方法之一是listFiles(),该方法用于获取在文件夹中的所有文件和文件夹的列表。我们可以使用该方法获得要操作的文件夹下面的所有文件或文件夹。 以下是一个读取文件夹下所…

    Java 2023年5月20日
    00
  • java求数组最大值和最小数示例分享

    Java求数组最大值和最小值示例分享 在Java开发中,我们经常需要对数组中的元素进行操作。其中,求出数组的最大值和最小值是常见操作之一。下面我们将会介绍两种不同的方法来求数组的最大值和最小值。 方法一: 遍历比较法 遍历比较法是一种简单粗暴的方法。我们可以通过循环遍历数组中的每一个元素,并且在遍历的过程中与当前的最大值或最小值进行比较。当我们遍历完整个数组…

    Java 2023年5月26日
    00
  • Java环境配置与编译运行详解

    Java环境配置与编译运行详解 环境配置 下载JDK安装包 JDK是Java Development Kit的缩写,是Java开发所必须的环境,我们需要从Oracle官网下载对应版本的JDK安装包。 下载地址:https://www.oracle.com/technetwork/java/javase/downloads/index.html 安装JDK 运…

    Java 2023年5月20日
    00
  • Java实现航空航班管理系统

    Java实现航空航班管理系统 系统概述 航空航班管理系统是一款基于Java的应用程序,主要用于管理航空公司的航班、乘客和机票等信息。该系统可以帮助航空公司简化订票、航班调度和客户服务等流程,提高管理效率和服务质量。 技术框架 本系统使用Java作为开发语言,并基于SSM框架进行开发。其中: Spring提供项目容器和依赖注入功能,方便组件之间的调用; Spr…

    Java 2023年5月19日
    00
  • 在CentOS 6.3中安装与配置Tomcat-7方法

    以下是“在CentOS 6.3中安装与配置Tomcat-7方法”的完整攻略: 安装Java 首先,从官网下载Java安装包。在本示例中,我们将操作JDK 8版本: wget –no-check-certificate –no-cookies –header "Cookie: oraclelicense=accept-securebackup-…

    Java 2023年5月19日
    00
  • 【IntelliJ IDEA】Maven构建自己的第一个Java后台的方法

    下面我为您详细讲解使用IntelliJ IDEA和Maven构建自己的第一个Java后台的方法: 准备工作 安装Java JDK并设置环境变量。 安装IntelliJ IDEA。 安装Maven。 创建Maven项目 打开IntelliJ IDEA,选择“Create New Project”。 选择“Maven”项目类型,然后点击“Next”。 输入项目信…

    Java 2023年6月2日
    00
  • Java实现的时间戳与date对象相互转换功能示例

    以下是“Java实现的时间戳与date对象相互转换功能示例”的攻略: 1. 使用Date对象实现时间戳与日期字符串的相互转换 1.1 时间戳转日期字符串 import java.text.SimpleDateFormat; import java.util.Date; public class TimestampToDateStr { public stat…

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