java实现文件上传、下载、图片预览

Java实现文件上传、下载、图片预览的完整攻略

上传文件

  1. 首先在前端页面设计一个上传文件的form表单,并设置enctype为multipart/form-data。form表单提交时,浏览器会解析其中的文件,并将其封装到一个HTTP请求中,在请求的正文中发送到服务器。
<form action="/upload" method="post" enctype="multipart/form-data">
    <label for="file">选择文件:</label>
    <input type="file" name="file" id="file" ><br><br>
    <input type="submit" name="submit" value="上传文件">
</form>
  1. 在服务器端编写相应的Controller方法,对上传的文件进行处理和保存。通常情况下,我们会利用SpringMVC框架,在Controller中使用@RequestMapping注解来处理用户的上传请求。具体的实现代码如下:
// 注册Controller
@RequestMapping("/upload")
@Controller
public class UploadController {
    // 将上传的文件保存到服务器中的 upload 文件夹下
    @PostMapping("/file")
    public String upload(@RequestParam("file") MultipartFile file,
                         RedirectAttributes redirectAttributes) {
        File dest = new File("/upload/" + file.getOriginalFilename());
        try {
            file.transferTo(dest);
            redirectAttributes.addFlashAttribute("message", "上传文件成功!");
        } catch (IOException e) {
            e.printStackTrace();
            redirectAttributes.addFlashAttribute("message", "上传文件失败:" + e.getMessage());
        }
        return "redirect:/upload";
    }
}

在上面的代码中,我们通过@RequestParam注解获取文件对象,然后通过MultipartFile的transferTo方法写入到服务器指定的文件夹中。写入时,可以根据file对象的getOriginalFilename()方法获取原始文件名,避免出现重名的冲突。

下载文件

  1. 在前端页面中,设计下载链接,指向我们在服务器上存储文件的路径,用户在点击链接时,浏览器会自动向服务器发送请求获取文件,并弹出下载选项。
<a href="/download/file?filePath=/upload/example.txt">下载文件</a>

在上面的代码中,我们在请求路径中指定要下载的文件路径。在下面的Controller方法中,我们通过HttpServletRequest的getParameter方法获取到该参数,然后根据该路径读取文件内容并返回。
2. 在服务器端编写相应的Controller方法,用于处理下载请求。具体的实现代码如下:

@GetMapping("/file")
public void download(@RequestParam("filePath") String filePath,
                     HttpServletResponse response) {
    try {
        File file = new File(filePath);
        FileInputStream fileInputStream = new FileInputStream(file);
        ServletOutputStream outputStream = response.getOutputStream();
        byte[] buffer = new byte[1024];
        int len = 0;
        while ((len = fileInputStream.read(buffer)) > 0) {
            outputStream.write(buffer, 0, len);
        }
        fileInputStream.close();
        outputStream.flush();
        outputStream.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

在上面的代码中,我们通过FileInputStream将指定路径的文件读取出来,并将其写入到HttpServletResponse的输出流中。这样浏览器就可以根据我们设置的文件名,自动将文件下载下来。

图片预览

  1. 在前端页面中,设计展示图片的标签,指向我们在服务器上存储图片的路径,在用户浏览网页时,页面会自动从服务器获取图片并展示。
<img src="/preview/image?sourcePath=/upload/example.jpg" alt="example">

在上面的代码中,我们在img标签中指定了要展示的图片路径。在下面的Controller方法中,我们将根据这个路径将图片读取出来并返回。
2. 在服务器端编写相应的Controller方法,用于处理展示图片的请求。具体的实现代码如下:

@GetMapping("/image")
public void previewImage(@RequestParam("sourcePath") String sourcePath,
                         HttpServletResponse response) {
    try {
        FileInputStream fileInputStream = new FileInputStream(sourcePath);
        ServletOutputStream outputStream = response.getOutputStream();
        byte[] buffer = new byte[1024];
        int len = 0;
        while ((len = fileInputStream.read(buffer)) > 0) {
            outputStream.write(buffer, 0, len);
        }
        fileInputStream.close();
        outputStream.flush();
        outputStream.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

在上面的代码中,我们根据请求参数指定的路径读取图片,并将其写入到HttpServletResponse的输出流中。由于在HTML中的img标签中已经指定了要展示的图片,因此我们只需要在服务器端返回该图片内容即可。

至此,我们已经实现了Java语言中的文件上传、下载和图片预览功能,这些功能无论是在Web应用程序或者手机应用程序中,都是非常关键的功能。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java实现文件上传、下载、图片预览 - Python技术站

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

相关文章

  • JDBC下Idea添加mysql-jar包的详细过程

    JDBC是Java语言操作关系型数据库的标准API,目前已经成为了Java中最流行的访问数据库的方式之一,因此在开发Java应用程序时,经常需要使用JDBC操作数据库。 而在使用Idea开发Java应用程序时,需要添加mysql-jar包才能够操作MySQL数据库。以下是JDBC下Idea添加mysql-jar包的详细过程: 下载mysql-jar包 首先,…

    Java 2023年6月16日
    00
  • Spring Security源码解析之权限访问控制是如何做到的

    首先,Spring Security是一个基于Spring框架的安全框架,它提供了身份认证和授权等功能,帮助我们防止各种安全攻击,保障我们的应用程序安全。 Spring Security的权限访问控制是通过访问控制表达式来实现的,可以在配置文件中配置。访问控制表达式包含了许多参数和操作符,用于判断用户是否有权访问特定的资源。具体来说,Spring Secur…

    Java 2023年5月20日
    00
  • RedisTemplate访问Redis的更好方法

    让我来详细讲解RedisTemplate访问Redis的更好方法的完整攻略。 RedisTemplate介绍 RedisTemplate是一个封装了Jedis库的Spring框架的Redis操作工具类,使用它可以更方便、更快速、更安全地对Redis进行读写。 如何使用RedisTemplate 使用RedisTemplate操作Redis,需要先创建一个Re…

    Java 2023年5月20日
    00
  • Springboot异常错误处理解决方案详解

    Spring Boot异常错误处理是一个非常重要的主题,它可以帮助我们更好地处理应用程序中的异常和错误。以下是Spring Boot异常错误处理解决方案的详细攻略: 全局异常处理 在Spring Boot中,我们可以使用@ControllerAdvice注解来定义全局异常处理器。以下是一个示例: @ControllerAdvice public class …

    Java 2023年5月15日
    00
  • Redis分布式锁这样用,有坑?

    背景 在微服务项目中,大家都会去使用到分布式锁,一般也是使用Redis去实现,使用RedisTemplate、Redisson、RedisLockRegistry都行,公司的项目中,使用的是Redisson,一般你会怎么用?看看下面的代码,是不是就是你的写法 String lockKey = “forlan_lock_” + serviceId; RLock…

    Java 2023年4月17日
    00
  • SpringMVC @RequestMapping注解属性详细介绍

    以下是关于“SpringMVC @RequestMapping注解属性详细介绍”的完整攻略,其中包含两个示例。 SpringMVC @RequestMapping注解属性详细介绍 在SpringMVC中,@RequestMapping注解是一个非常重要的注解,它用于将请求映射到对应的控制器方法上。@RequestMapping注解有很多属性,下面我们来详细介…

    Java 2023年5月16日
    00
  • Linux下ZooKeeper分布式集群安装教程

    Linux下ZooKeeper分布式集群安装教程 简介 ZooKeeper是一个分布式协调服务,它能够为分布式应用提供协调支持。ZooKeeper提供了一个高可用、高性能、分布式的数据管理组件,主要用于管理分布式应用的一些协调工作,如分布式锁、命名服务、同步、配置管理等。 在本教程中,我们将介绍如何在Linux系统上搭建ZooKeeper分布式集群。 前提条…

    Java 2023年5月20日
    00
  • 并发收集器的作用是什么?

    并发收集器是一种提供“与用户线程同时执行”的垃圾收集器,它的主要作用是在垃圾收集过程中不影响应用程序的运行。 在使用并发收集器时,首先需要在JVM启动参数中指定收集器类型,可以使用以下参数: -XX:+UseConcMarkSweepGC 接着需要在代码中对需要进行垃圾收集的对象进行特殊标记,例如: private final ConcurrentMap&l…

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