Springboot实现图片上传

一、前言

对于图片上传,大家应该对表单数据进行上传图片很熟悉,包括本人,因为我们学习JavaWeb的第一种交互就是写一个JSP页面,里面一个表单进行提交,然后表单可以提交的内容形式很多包括字符数据也可以file。但今天要介绍另外一种简单方便的方式,通过Base64编码上传。

参考文章
springboot采用base64上传图片
关于JDK更新1.8之后的Base64的用法
表单形式上传
二、具体步骤

  1. 什么是Base64

Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。可查看RFC2045~RFC2049,上面有MIME的详细规范。
Base64编码是从二进制到字符的过程,可用于在HTTP环境下传递较长的标识信息。采用Base64编码具有不可读性,需要解码后才能阅读。

关于Base64的具体加密解密过程,我们没有必要去研究,我们只要知道,通过此种方式即可将图片转换成字符串,然后通过JSON数据传输就可以了。

  1. 常见的数据类型
    (1)数值型
    (2)非数值型(例如,图片、文件、xml、json、字符串、音视频等)

  2. Http交互的常见数据(打开postman测试接口工具看吧,也可参考HTTP这边书)

4.直接在采用application/json交互的控制类里面获取字符串,然后解密即可
在线生成base64编码字符串

 String material = req.getString("imgStr");
        String rawBase64 = "";
             if(material!=null)
                rawBase64=material.substring(material.indexOf(",") + 1);

            //对字节数组字符串进行Base64解码并生成图片
            if (rawBase64 == null) {
                //图像数据为空
            }
//            BASE64Decoder decoder = new BASE64Decoder();
       java.util.Base64.Decoder decoder =  java.util.Base64.getDecoder();
        //Base64.Decoder decoder = Base64.getDecoder();

            try {
                //Base64解码
                byte[] b = decoder.decode(rawBase64);
                for (int i = 0; i < b.length; ++i) {
                    //调整异常数据
                    if (b[i] < 0) {
                        b[i] += 256;
                    }
                }
                //新生成的图片
                String path = "";//服务器地址,直接在sftp里面复制路径
                File file = new File(path+userId);
                if(!file.exists())
                {
                    file.mkdir();
                }
                Date date = new Date();

                String imgFilePath = path+userId+"/" +date.getTime() + ".png";

                OutputStream out = new FileOutputStream(imgFilePath);
                out.write(b);
                out.flush();
                out.close();

            } catch (Exception e) {
                e.printStackTrace();
            }

表单形式:


获取参数:

使用 MultipartFile file,获取参数,发送时注意格式问题,就不能使用application/json提交了,需要表单提交


        // 图片处理
        if(!file.isEmpty()){ // 图片非空
          String fileName = file.getOriginalFilename();
          //后缀名
          String suffixName = fileName.substring(fileName.lastIndexOf("."));// 从某个地方开始截取

          // UUID.? 随机生成 https://www.cnblogs.com/jepson6669/p/8328546.html
           String filePath =  "";

           File file1 = new File(userId);
           if(!file1.exists()){ //不存在则创建该目录
               file1.mkdir();
           }

           Date date = new Date();

           String imageFileName = date.getTime()+""+suffixName;

           File dest = new File(imageFileName);
           try{
               file.transferTo(dest);
           }catch (Exception e){
               e.printStackTrace();;
           }
        }
  1. 测试

打开接口测试,在相应字段粘贴在线生成的字符串,然后通过sftp查看图片有无生成,另外还可以将字符串以及地址存数据库中。

  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
在Spring Boot中实现图片上传可以通过以下步骤进行: 1. 首先,确保你的项目中已经引入了Spring Boot的相关依赖,包括`spring-boot-starter-web`和`spring-boot-starter-webflux`。 2. 在你的Controller中创建一个处理文件上的接口,可以使用`@PostMapping`注解来指定请求路径和请求方法。例如: ```java @RestController public class FileUploadController { @PostMapping("/upload") public String uploadFile(@RequestParam("file") MultipartFile file) { // 处理文件上逻辑 // ... return "File uploaded successfully!"; } } ``` 3. 在上述代码中,`@RequestParam("file")`注解用于接收前端递的文件数据。你也可以通过添加`@RequestPart`注解来接收文件数据。 4. 接着,你需要配置文件上的相关参数。在`application.properties`或`application.yml`文件中添加以下配置: ```properties # 文件上限制 spring.servlet.multipart.max-file-size=10MB spring.servlet.multipart.max-request-size=10MB # 临时文件存储路径 spring.servlet.multipart.location=/tmp ``` 上述配置中,你可以根据需要修改文件上的大小限制和临时文件存储路径。 5. 最后,在前端页面中创建一个表单用于文件上,并将表单的`enctype`属性设置为`multipart/form-data`。示例如下: ```html <form method="POST" action="/upload" enctype="multipart/form-data"> <input type="file" name="file" /> <button type="submit">Upload</button> </form> ``` 通过以上步骤,你就可以在Spring Boot中实现图片上传功能了。当用户选择文件并点击上按钮时,文件将被发送到后端的`/upload`接口进行处理。你可以在该接口中编写逻辑来保存文件、生成文件URL等操作。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值