首页 > 其他分享 >使用Spring Boot实现文件上传功能

使用Spring Boot实现文件上传功能

时间:2024-07-12 10:07:41浏览次数:6  
标签:java -- Spring Boot springframework file import org 上传

使用Spring Boot实现文件上传功能

大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!

在这篇文章中,我们将详细介绍如何使用Spring Boot实现文件上传功能。这是一个常见的需求,无论是处理用户上传的图片、文档,还是其他类型的文件,了解并掌握文件上传的实现是非常重要的。接下来,我们将通过具体的代码示例来演示如何实现这一功能。

1. 创建Spring Boot项目

首先,我们需要创建一个Spring Boot项目。在你的IDE中选择创建一个新的Spring Boot项目,确保选择以下依赖项:

  • Spring Web
  • Spring Boot DevTools

项目创建完成后,项目结构如下:

src/
|-- main/
|   |-- java/
|   |   `-- cn/
|   |       `-- juwatech/
|   |           `-- fileupload/
|   |               |-- FileUploadApplication.java
|   |               `-- controller/
|   |                   `-- FileUploadController.java
|   `-- resources/
|       |-- application.properties
|       `-- static/
|-- test/
    `-- java/

2. 配置文件

application.properties文件中,添加以下配置来指定文件上传的存储路径:

file.upload-dir=uploads

3. 创建文件上传控制器

接下来,我们将创建一个控制器类FileUploadController,来处理文件上传请求。

package cn.juwatech.fileupload.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

@RestController
public class FileUploadController {

    @Value("${file.upload-dir}")
    private String uploadDir;

    @PostMapping("/upload")
    public ResponseEntity<String> handleFileUpload(@RequestParam("file") MultipartFile file) {
        String fileName = StringUtils.cleanPath(file.getOriginalFilename());
        try {
            if (file.isEmpty()) {
                return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("File is empty");
            }

            // 将文件保存到目标目录
            Path targetLocation = Paths.get(uploadDir).toAbsolutePath().normalize().resolve(fileName);
            Files.copy(file.getInputStream(), targetLocation);

            return ResponseEntity.ok("File uploaded successfully: " + fileName);
        } catch (IOException ex) {
            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Could not upload the file: " + fileName);
        }
    }
}

4. 启动类

最后,创建主启动类FileUploadApplication

package cn.juwatech.fileupload;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class FileUploadApplication {
    public static void main(String[] args) {
        SpringApplication.run(FileUploadApplication.class, args);
    }
}

5. 测试文件上传

启动Spring Boot应用程序,访问http://localhost:8080/upload,你可以使用工具如Postman来测试文件上传功能。选择POST方法并上传文件:

POST /upload
Content-Type: multipart/form-data
Body: file=<选择要上传的文件>

6. 完整代码示例

以下是整个项目的代码结构及内容:

application.properties

file.upload-dir=uploads

FileUploadController.java

package cn.juwatech.fileupload.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

@RestController
public class FileUploadController {

    @Value("${file.upload-dir}")
    private String uploadDir;

    @PostMapping("/upload")
    public ResponseEntity<String> handleFileUpload(@RequestParam("file") MultipartFile file) {
        String fileName = StringUtils.cleanPath(file.getOriginalFilename());
        try {
            if (file.isEmpty()) {
                return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("File is empty");
            }

            Path targetLocation = Paths.get(uploadDir).toAbsolutePath().normalize().resolve(fileName);
            Files.copy(file.getInputStream(), targetLocation);

            return ResponseEntity.ok("File uploaded successfully: " + fileName);
        } catch (IOException ex) {
            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Could not upload the file: " + fileName);
        }
    }
}

FileUploadApplication.java

package cn.juwatech.fileupload;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class FileUploadApplication {
    public static void main(String[] args) {
        SpringApplication.run(FileUploadApplication.class, args);
    }
}

至此,我们已经成功实现了一个简单的Spring Boot文件上传功能。你可以根据实际需求,进一步扩展和优化这个功能,例如添加文件类型和大小的验证,提供更多的文件处理选项等。

著作权归聚娃科技微赚淘客系统开发者团队,转载请注明出处!

标签:java,--,Spring,Boot,springframework,file,import,org,上传
From: https://www.cnblogs.com/szk123456/p/18297688

相关文章

  • 基于java+springboot+vue实现的在线教育系统(文末源码+Lw)111
    基于SpringBoot+Vue的实现的在线教育系统(源码+数据库+万字Lun文+流程图+ER图+结构图+演示视频+软件包)系统功能:本在线教育系统管理员功能有个人中心,用户管理,讲师管理,普通管理员管理,课程管理员管理,课程管理,课程分类管理,教师管理,名师管理,系统管理,订单管理。普通管理员和课程......
  • 基于java+springboot+vue实现的作业管理系统(文末源码+Lw)110
    基于SpringBoot+Vue的实现的作业管理系统(源码+数据库+万字Lun文+流程图+ER图+结构图+演示视频+软件包)功能描述:作业管理系统有管理员,教师,学生三个角色。教师和学生都可以进行注册然后再登录。学生可以修改自己的密码,查看和下载作业信息,并且可以提交自己写好的作业,并且可以......
  • SpringBoot2.6.13版本引入Swagger
    1.引入依赖<!--https://mvnrepository.com/artifact/io.springfox/springfox-swagger2--><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>3.0.0</version&g......
  • ESP32纯Cj简单实现图片上传阿里云OSS
    对于嵌入式设备资源较少或者运行环境较简单的环境下,如果只是简单上传一张图片到阿里云OSS服务器的话,移植阿里云OSS的SDK就是一件性价比很低而且不一定能实现的事情了。那就得考虑自己实现一套简单的、最基础的图片上传功能。阿里云OSS提供了RESTAPI方式的图片上传接口,即通过HTTP......
  • 缓存框架-Spring Cache基本用法
    一、概述SpringCache是一个框架,实现了基于注解的缓存功能,只需要简单地加一个注解,就能实现缓存功能。SpringCache提供了一层抽象,底层可以切换不同的缓存实现,例如:EHCacheCaffeineRedis(常用)二、环境准备1、导入Redis和SpringCache依赖<dependency><groupId......
  • 【SpringBoot框架】-- 快速入门
    目录1.spring简介1.1springboot快速入门1.1.1开发步骤1.1.2创建项目2.springboot的特点3.配置文件种类4.读取配置文件中的内容4.1 @ConfigurationPropertie4.2  @Value5.profile多环境配置 6.springboot注册web组件7.springboot包扫描的原理8.spr......
  • Java毕业设计基于Vue+SpringBoot的博物馆展览与服务一体化平台(代码+数据库+文档LW+运
    文末获取资源,收藏关注不迷路文章目录前言主要使用技术研究内容核心代码文章目录前言博物馆展览与服务一体化,其工作流程繁杂、多样、管理复杂与设备维护繁琐。而计算机已完全能够胜任博物馆展览与服务一体化工作,而且更加准确、方便、快捷、高效、清晰、透明,它完全......
  • Java毕业设计基于Vue+SpringBoot的单位公司员工考勤签到系统(代码+数据库+文档LW+运行
    文末获取资源,收藏关注不迷路文章目录前言主要使用技术研究内容核心代码文章目录前言当今社会已经步入了科学技术进步和经济社会快速发展的新时期,国际信息和学术交流也不断加强,计算机技术对经济社会发展和人民生活改善的影响也日益突出,人类的生存和思考方式也产生......
  • Java毕业设计基于Vue+SpringBoot的厨房达人美食分享平台(代码+数据库+文档LW+运行成功
    文末获取资源,收藏关注不迷路文章目录前言主要使用技术研究内容核心代码文章目录前言厨房达人美食分享平台的目的是让使用者可以更方便的将人、设备和场景更立体的连接在一起。能让用户以更科幻的方式使用产品,体验高科技时代带给人们的方便,同时也能让用户体会到与......
  • Simple WPF: S3实现MINIO大文件上传并显示上传进度
    最新内容优先发布于个人博客:小虎技术分享站,随后逐步搬运到博客园。创作不易,如果觉得有用请在Github上为博主点亮一颗小星星吧!目的早两天写了一篇S3简单上传文件的小工具,知乎上看到了一个问题问如何实现显示MINIO上传进度,因此拓展一下这个小工具能够在上传大文件时显示进度。完......