java实现文件上传下载和图片压缩代码示例

Java实现文件上传

1. 准备工作

在进行文件上传前,需要在服务器上建立一个存储上传文件的目录,并且需要在前端用HTML5的file标签来设置文件选择框。

2. 前端代码

前端代码使用HTML5的form表单和一个file选择框,具体如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>文件上传示例</title>
</head>
<body>
<form action="/file/uploadFile" method="post" enctype="multipart/form-data">
    <label for="file">选择要上传的文件:</label>
    <input type="file" name="file" id="file"><br>
    <input type="submit" name="submit" value="上传">
</form>
</body>
</html>

3. 后端代码

后端代码中使用Spring MVC框架来处理文件上传,controller代码实现如下:

@Controller
@RequestMapping("/file")
public class FileUploadController {

    @RequestMapping(value = "/uploadFile", method = RequestMethod.POST)
    public String uploadFileHandler(@RequestParam("file") MultipartFile file, ModelMap model) {
        if (!file.isEmpty()) {
            try {
                String fileName = file.getOriginalFilename();
                byte[] bytes = file.getBytes();
                // TODO 存储上传文件并且返回下载链接
                model.addAttribute("message", "上传文件成功:" + fileName);
                return "success";
            } catch (Exception e) {
                model.addAttribute("message", "上传文件失败:" + e.getMessage());
                return "error";
            }
        } else {
            model.addAttribute("message", "请选择要上传的文件!");
            return "error";
        }
    }

}

Java实现文件下载

1. 前端代码

文件下载的前端代码可以通过超链接或者一个表单的submit方式来实现,直接下载不需要前端ajax方式。

2. 后端代码

文件下载的后端代码中,需要设置Response的头文件,告诉浏览器要下载的文件的信息,具体实现如下:

@Controller
@RequestMapping("/file")
public class FileDownloadController {

    @RequestMapping(value = "/downloadFile/{file_name:.+}", method = RequestMethod.GET)
    public void downloadFile(@PathVariable("file_name") String fileName, HttpServletResponse response) {
        try {
            File file = new File("存储文件的路径" + fileName);
            response.setContentType("application/octet-stream");
            response.setHeader("Content-Disposition", "attachment; filename=\"" + file.getName() + "\"");
            InputStream inputStream = new FileInputStream(file);
            OutputStream outputStream = response.getOutputStream();
            byte[] buffer = new byte[4096];
            int length;
            while ((length = inputStream.read(buffer)) > 0) {
                outputStream.write(buffer, 0, length);
            }
            outputStream.flush();
            outputStream.close();
            inputStream.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

Java实现图片压缩

1. 使用Java自带类库压缩图片

Java自带了图片处理类库,可以使用Java提供的类库来实现图片压缩,具体实现如下:

public static void compressImageByJava(File sourceFile, File targetFile, int targetWidth, int targetHeight, float quality) {
        FileInputStream inputStream;
        try {
            inputStream = new FileInputStream(sourceFile);

            Image img = ImageIO.read(inputStream);
            int width = img.getWidth(null);
            int height = img.getHeight(null);
            if (width > targetWidth) {
                height = height * targetWidth / width;
                width = targetWidth;
            }
            if (height > targetHeight) {
                width = width * targetHeight / height;
                height = targetHeight;
            }

            BufferedImage targetImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
            Graphics2D graphics = targetImage.createGraphics();
            graphics.drawImage(img, 0, 0, width, height, null);
            graphics.dispose();

            FileOutputStream out = new FileOutputStream(targetFile);
            JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
            JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(targetImage);
            param.setQuality(quality, true);
            encoder.encode(targetImage, param);
            out.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

2. 使用第三方类库压缩图片

如果想要更灵活的图片压缩方式,可以使用第三方类库ImageIO和Thumbnails来实现,具体实现如下:

public static void compressImageByThirdParty(File sourceFile, File targetFile, int targetWidth, int targetHeight, float quality) {
        try {
            Thumbnails.of(sourceFile)
                    .size(targetWidth, targetHeight)
                    .outputQuality(quality) // 设置图片质量
                    .toFile(targetFile);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java实现文件上传下载和图片压缩代码示例 - Python技术站

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

相关文章

  • 共享对象的作用是什么?

    以下是关于共享对象的作用的完整使用攻略: 共享对象的作用 共享对象是指多个线程可以访问的对象。在多线程编程中,共享对象是常常见的,例如共享变量、共享队列等。共享对象的作用是在多线程编程中实现线程间的通信和数据共享。多个线程可以同时访问共享对象,从而实现数据的共享和交换。共享对象可以用来实现线程间的同步和协作,从而提高程序的并发性和效率。 共享的示例 以下两个…

    Java 2023年5月12日
    00
  • springboot 按月分表的实现方式

    下面是springboot按月分表的实现方式完整攻略: 第一步:创建表和初始化数据 首先,我们需要创建一张原始的订单表,结构如下: CREATE TABLE `order` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT ‘主键ID’, `order_no` varchar(64) DEFAULT NULL…

    Java 2023年5月20日
    00
  • Java中常用的日期类图文详解

    Java中常用的日期类图文详解 为什么要使用日期类? 在Java编程中,我们会经常用到日期类型的数据,就像我们平时在日常生活中也需要知道日期和时间。Java提供了专门处理日期和时间的类库,这些类库可以用来轻松地执行各种日期和时间相关的操作。使用Java日期类可以提高我们处理日期的效率和精度,同时也可以避免我们编写代码时进行复杂的计算和转换等操作。 Date类…

    Java 2023年5月20日
    00
  • SpringBoot整合JPA数据源方法及配置解析

    下面就来详细讲解SpringBoot整合JPA数据源方法及配置解析。 一、什么是JPA JPA(Java Persistence API)是Java持久化规范,是EJB 3.0规范的一部分,旨在为Java开发人员提供一个数据库无关的对象/关系映射标准,以便管理Java应用程序中的持久化数据。在JPA中,我们通过实体类来操作数据库,不再需要手写增删改查的SQL…

    Java 2023年5月20日
    00
  • Java调用dll文件的实现解析

    下面就来详细讲解“Java调用dll文件的实现解析”的完整攻略。 什么是DLL文件 首先,我们需要了解一下DLL文件,DLL是Dynamic Link Library的缩写,是动态链接库的意思,它是Windows系统中用来提供一些功能的动态库文件,以实现代码复用,减少内存占用等等的目的。 在Windows系统中,有许多功能模块通过DLL文件的方式进行提供,例…

    Java 2023年5月19日
    00
  • MyBatis实现插入大量数据方法详解

    MyBatis实现插入大量数据方法详解 介绍 在实际开发中,可能会遇到需要插入大量数据的情况。如果使用MyBatis默认的SQL语句,会导致多次数据库交互,效率低下。因此,本篇文章将介绍MyBatis如何实现插入大量数据的方法。 使用batch插入 MyBatis提供了批量插入数据的功能,即batch插入。下面是示例代码: <insert id=&qu…

    Java 2023年5月20日
    00
  • 详解Java中的时区类TimeZone的用法

    下面是详解Java中的时区类TimeZone的用法的完整攻略。 时间和时区 在计算机程序中,时间很重要。时间的概念最初来源于物理学,指的是我们日常生活中我们感知到的一种连续不断的流逝。在计算机中,时间就是一系列数字,用于表示一个时间点的位置。由于全球各地的人们都有不同的习惯和语言,所以计算机中的时间也必须考虑时区的影响。Java提供了TimeZone类,它可…

    Java 2023年5月20日
    00
  • java显示当前美国洛杉矶时间

    要在Java中显示当前美国洛杉矶时间,可以使用Java提供的时间日期API,以下是完整的攻略: 获取当前时间 使用Java提供的Date类可以获取当前时间。代码如下: Date date = new Date(); 设置时区为美国洛杉矶 使用Java提供的TimeZone类可以设置时区。代码如下: TimeZone timeZone = TimeZone.g…

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