SpringBoot后端图片上传

文章介绍了使用SpringMVC框架实现的三个上传文件控制器方法,包括单个文件上传、配置文件路径和同时上传两个文件夹的示例。
在控制层controller:

方法一:

package com.example.windward.controller;


import com.example.windward.entity.UserInfo;
import com.example.windward.service.UserInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.util.UUID;

@RestController
@RequestMapping("/upphoto")
@CrossOrigin(origins = "*",maxAge = 3600)
public class UploadUser {

    @Autowired
    UserInfoService userInfoService;

    @PostMapping("/fileUpload")
    public String fileUpload(@RequestParam MultipartFile file, UserInfo userInfo) throws IOException {
        /**
         * 上传图片
         */
        System.out.println(userInfo.getPhoto());

        String filePath = "上传图片的路径";
        //获取原始图片的拓展名
        String originalFilename = file.getOriginalFilename();
        //新的文件名字
        String newFileName = UUID.randomUUID() + originalFilename;
        //封装上传文件位置的全路径
        File targetFile = new File(filePath, newFileName);
        //把本地文件上传到封装上传文件位置的全路径
        file.transferTo(targetFile);
        userInfo.setPhoto(newFileName);
        System.out.println("新文件名:"+newFileName);
        return userInfo.getPhoto();
    }
}

方法二:

package com.example.studengmc03.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.util.UUID;

@RestController
@RequestMapping("/upfile")
@CrossOrigin(origins = "*",maxAge = 3600)
public class UpfileController {

    //要上传的路径
    @Value("${upfile.photoPath}")
    String path;

    @PostMapping("/photo")
    public String upphoto(@RequestParam MultipartFile file) throws IOException {

        //获得原始文件名 123.jpg
        String originName = file.getOriginalFilename();
        //新文件名 5e37e417-7694-4604-bf2e-987f9abe959a
        String filename = UUID.randomUUID().toString()+originName.substring(originName.lastIndexOf("."));
        //将文件保存到指定
        file.transferTo(new File(path+filename));
        //向客户端浏览器返回文件名
        return filename;
    }
}

yaml:

  servlet:
    multipart:
      max-file-size: 500MB #文件最大限制
      max-request-size: 500MB #请求最大限制
#图片上传路径
upfile:
  photoPath: 图片的路径(不需要带引号)

方法三:(当前后端分离时,同时上传两个文件夹

package com.example.windward.controller;


import com.example.windward.entity.Clerk;
import com.example.windward.entity.UserInfo;
import com.example.windward.service.ClerkService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.UUID;

@RestController
@RequestMapping("/upflie")
@CrossOrigin(origins = "*",maxAge = 3600)
public class UploadClerk {
    @Autowired
    ClerkService clerkService;

    @PostMapping("/uploadclerk")
    public String fileUpload(@RequestParam MultipartFile file, Clerk clerk) throws IOException {
        /**
         * 上传图片
         */
        System.out.println(clerk.getCardphoto());

        String filePath = "上传图片的地址";
        String filePath2 = "上传图片的地址";
        //获取原始图片的拓展名
        String originalFilename = file.getOriginalFilename();
        //新的文件名字
        String newFileName = UUID.randomUUID() + originalFilename;
        //封装上传文件位置的全路径
        file.transferTo(new File(filePath + newFileName));
        Path sourcePath = Paths.get(filePath + newFileName);
        Path destPath = Paths.get(filePath2 + newFileName);
        Files.copy(sourcePath, destPath); // 复制文件到另一个文件夹

        clerk.setCardphoto(newFileName);
        System.out.println("新文件名:"+newFileName);
        System.out.println(filePath+ newFileName + "      " + filePath2 + newFileName);
        return clerk.getCardphoto();
    }
}

### Spring Boot 中实现文件(片)和文本数据的同时上传 为了实现在Spring Boot应用程序中同时上传文件(片)以及文本数据的功能,可以采用多部分表单提交的方式。这种方式允许客户端在一个HTTP请求中发送多个不同类型的数据。 #### 配置Multipart支持 首先,在`application.properties`或`application.yml`配置文件中启用multipart的支持并设置最大文件大小: ```properties spring.servlet.multipart.enabled=true spring.servlet.multipart.max-file-size=10MB spring.servlet.multipart.max-request-size=10MB ``` 上述配置项启用了multipart解析,并设定了单个文件的最大尺寸为10MB[^1]。 #### 创建控制器来处理上传逻辑 定义一个RESTful API接口用于接收来自前端的POST请求。此API应能够接受两个参数:一个是代表像或其他类型的二进制文件;另一个则是普通的字符串形式的文字内容。 ```java import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; @RestController @RequestMapping("/upload") public class UploadController { @PostMapping("/imageAndText") public String handleFileUpload(@RequestParam("file") MultipartFile file, @RequestParam("textData") String textContent) { if (file.isEmpty()) { return "Please select a file to upload."; } try { // Save the uploaded image or process it as needed. byte[] bytes = file.getBytes(); // Process your text data here, e.g., save into database return "You successfully uploaded '" + file.getOriginalFilename() + "' and received text content: " + textContent; } catch (Exception e) { return "Failed to upload " + file.getOriginalFilename() + ": " + e.getMessage(); } } } ``` 这段代码展示了如何创建一个简单的控制器方法来处理带有文件(`@RequestParam("file")`) 和 文本 (`@RequestParam("textData")`) 的 POST 请求。当接收到这些信息后,可以根据具体需求进一步处理它们,比如存储到数据库或者磁盘上。 #### 前端HTML表单示例 为了让用户能方便地选择要上传的内容,可以在网页中提供一个多部分表单调用这个服务端点: ```html <form action="/upload/imageAndText" method="post" enctype="multipart/form-data"> Select an image file: <input type="file" name="file"><br> Enter some text: <textarea rows="4" cols="50" name="textData"></textarea><br> <button>Submit</button> </form> ``` 以上是一个基本的例子说明了怎样构建一个包含文件输入框和文本区域的HTML表单,它会向指定的服务地址发起带有多媒体附件的消息体传输请求[^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值