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日

相关文章

  • jsp页面验证码完整实例

    下面是关于”JSP页面验证码完整实例”的完整攻略: 1. 流程介绍 验证码是一种常见的安全验证,可以有效地防止机器人程序以及恶意攻击。在 JSP 页面中,使用验证码可以有效地保障数据的安全性。 本文将介绍如何在 JSP 页面中实现验证码的功能,包括生成随机验证码、将验证码展示在页面中、验证用户输入的验证码是否正确等。具体流程如下: 用户在页面中填写用户名、密…

    Java 2023年6月15日
    00
  • 一文带你入门SpringMVC的配置与使用

    以下是关于“一文带你入门SpringMVC的配置与使用”的完整攻略,其中包含两个示例。 1. 前言 SpringMVC是一种常用的Java Web开发框架,它可以帮助开发者快速构建Web应用程序。本攻略将详细讲解SpringMVC的配置与使用,帮助读者快速入门SpringMVC框架。 2. SpringMVC的配置 以下是SpringMVC的配置步骤: 配置…

    Java 2023年5月16日
    00
  • 解决SpringBoot跨域的三种方式

    接下来我将详细讲解解决SpringBoot跨域的三种方式及示例操作。 一、什么是SpringBoot跨域 跨域是指在浏览器跨域请求时出现的安全限制,是由浏览器的同源策略造成的。简单来说,即浏览器的同源策略为了保证用户信息的安全,会限制页面发起跨域请求,从而避免恶意的数据访问和攻击。 而SpringBoot作为后台服务框架,不论是前端还是其他后台服务都可能通过…

    Java 2023年5月31日
    00
  • 关于三种主流WEB架构的思考

    非常感谢您浏览我们网站上的“关于三种主流WEB架构的思考”这篇文章。在本文中,我们将围绕三种主流WEB架构(MVC、MVP、MVVM)进行详细的介绍和比较分析。 1. 介绍三种主流WEB架构 MVC MVC架构是由模型、视图和控制器三个核心组件构成的架构模式。它的主要思想是将业务逻辑、用户交互和数据模型分离开来,从而使代码更加整洁、结构更加清晰。 模型:负责…

    Java 2023年5月20日
    00
  • Java实现将文件或者文件夹压缩成zip的详细代码

    将文件或者文件夹压缩成zip是Java中的一个常见任务。下面是一份详细的Java代码攻略来实现这个功能。 1. 引入相关依赖 Java提供了ZipOutputStream和ZipEntry这两个类来实现文件或者文件夹压缩成zip的功能,因此需要通过pom文件或者手动导入相关依赖。 <dependency> <groupId>org.a…

    Java 2023年5月31日
    00
  • 基于spring+springmvc+hibernate 整合深入剖析

    下面是关于基于Spring+SpringMVC+Hibernate整合的详细攻略,包含两个示例说明。 基于Spring+SpringMVC+Hibernate整合深入剖析 Spring+SpringMVC+Hibernate是一种流行的Java Web开发框架组合,它可以帮助我们快速构建Web应用程序。在本文中,我们将介绍如何使用Spring+SpringM…

    Java 2023年5月17日
    00
  • Java binarysearch方法原理详解

    Java binarySearch方法原理详解 什么是binarySearch方法 binarySearch方法是Java Util API提供的的一个静态方法,用于在有序数组中二分查找指定的值。 binarySearch方法原理 binarySearch方法实际上是对比给定值与数组中间值的大小,如果给定值小于中间值,则继续在左半部分递归查找;如果大于,则在…

    Java 2023年5月26日
    00
  • Java Swagger使用教程

    下面是Java Swagger使用教程的完整攻略: 1. 什么是Swagger? Swagger是一个规范和完整的框架,用于生成、描述、调用和可视化RESTful风格的Web服务。Swagger包含了许多强大的工具,可以使用它们来构建、文档化和测试RESTful API。 2. Swagger的优点 Swagger最大的好处是它使API文档变得容易,让API…

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