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日

相关文章

  • springboot结合全局异常处理实现登录注册验证

    下面我将为你详细讲解“Spring Boot结合全局异常处理实现登录注册验证”的完整攻略。 1. 前置知识 在学习此内容之前,你需要对以下技术有一定的了解: Spring Boot Spring MVC Spring Security Maven 2. 添加依赖 首先,我们需要在pom.xml文件中添加一些依赖。这些依赖包括: <!– Spring …

    Java 2023年5月25日
    00
  • Java流操作之数据流实例代码

    Java中的流操作可以帮助我们更加高效地处理数据。其中,数据流是一种特殊类型的流,可以用于操作原始数据类型值的流(例如 int,double,long 等)。在这里,我将为大家详细介绍“Java流操作之数据流实例代码”的完整攻略。 数据流简介 数据流是 Java 中用于操作原始数据类型的流。数据流实现了 DataInput 和 DataOutput 接口,可…

    Java 2023年5月23日
    00
  • Sprint Boot @Autowired使用方法详解

    @Autowired是Spring Boot中的一个注解,它用于自动装配Bean。在使用Spring Boot开发应用程序时,@Autowired是非常重要的。本文将详细介绍@Autowired的作用和使用方法,并提供两个示例说明。 @Autowired的作用 @Autowired的作用是自动装配Bean。使用@Autowired注解的属性或构造函数参数将自…

    Java 2023年5月5日
    00
  • 你要的Java并发面试题都在这里,20000字答案解析(小结)

    “你要的Java并发面试题都在这里,20000字答案解析(小结)”攻略 简介 “你要的Java并发面试题都在这里,20000字答案解析(小结)”是一篇非常详细而全面的关于Java并发编程的面试题和答案解析的文章。对于准备Java并发编程相关面试的开发者来说,这篇文章是一份非常有价值的参考资料。 内容概述 本文主要包括以下内容: Java并发基础知识:Java…

    Java 2023年5月26日
    00
  • java 将方法作为传参–多态的实例

    当我们在Java中定义一个方法时,有时需要将另一个方法作为参数进行传递。这种将方法作为另一个方法的参数的机制被称为方法参数化或方法传递。 这种技术是Java多态的实例之一,多态允许我们以不同的方式来处理不同类型的对象。将方法参数化允许我们根据需要传递不同的行为。 下面是完整的攻略,分为以下几个步骤: 1.定义一个接口 我们首先需要定义一个接口,它将定义我们需…

    Java 2023年5月26日
    00
  • JavaScript中Math对象相关知识全解

    JavaScript中Math对象相关知识全解 Math对象概述 Math是JavaScript的内置对象之一,它提供了大量用于数学计算的方法和常量。在使用Math对象时,不需要创建实例,直接使用即可。 常用方法 Math.round() Math.round() 方法返回一个四舍五入后最接近的整数。该方法接收一个数字作为参数,该数字可以是任意的数值类型,包…

    Java 2023年5月26日
    00
  • Java持久层面试题目及答案整理

    Java持久层面试题目及答案整理 1. 什么是持久化? 持久化是指将内存中的数据存储到硬盘等外部介质中,使其具有持久性和长久性,可以随时被读取和使用。在Java中,持久化主要体现在数据的存储和读取,主要通过数据库来实现。 2. 什么是ORM? ORM全称Object Relational Mapping,指对象关系映射。ORM框架是将Java对象和关系数据库…

    Java 2023年6月16日
    00
  • 在Mac OS上安装Tomcat服务器的教程

    在Mac OS上安装Tomcat服务器的教程 简介 Tomcat是一个基于Java语言实现的Web服务器,也可作为一个Servlet容器运行,目前是最为流行的Web服务器之一。在Mac OS操作系统上安装Tomcat服务器,可以方便地搭建Web应用程序,供其他用户访问。本文将介绍如何在Mac OS上安装Tomcat服务器的详细过程。 步骤一:下载Tomcat…

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