SpringBoot上传文件

如果你不相信努力和时光,那么成果就会是第一个选择辜负你的。不要去否定你自己的过去,也不要用你的过去牵扯你现在的努力和对未来的展望。不是因为拥有希望你才去努力,而是去努力了,你才有可能看到希望的光芒。SpringBoot上传文件,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

废话不多说直接上代码

package com.ynjs.controller;

import com.ynjs.common.exception.CustomException;
import com.ynjs.common.jwt.JwtTokenUtils;
import com.ynjs.common.result.Result;
import com.ynjs.mapper.BizWxPasserMapper;
import com.ynjs.pojo.BizWxPasser;
import io.swagger.annotations.ApiParam;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Objects;

/**
 * 支付控制器
 */
@Slf4j
@RestController
@RequestMapping("/appapi")
public class PostedFile {
    /**
     * 1. 图像文件:JPEG、PNG、GIF、BMP、SVG等。
     * 2. 文档文件:PDF、DOC、DOCX、XLS、XLSX、PPT、PPTX等。
     * 3. 压缩文件:ZIP、RAR、7Z、TAR、GZ等。频文件:MP4、AVI、MOV、WMV、FLV等。
     * * 5. 音频文件:MP3、WAV、AAC、FLAC等。
     * * 6. 文本文件:TXT、CSV、XML、JSON等。
     * 4. 视
     */

    @Resource
    private BizWxPasserMapper bizWxPasserMapper;

    private static String getFileExtension(String fileName) {
        int dotIndex = fileName.lastIndexOf(".");
        if (dotIndex > 0 && dotIndex < fileName.length() - 1) {
            return fileName.substring(dotIndex + 1).toLowerCase();
        }
        return "";
    }

    private static boolean isAllowedExtension(String fileExtension, String allowedExtensions) {
        String[] allowedExtensionArray = allowedExtensions.split(",");
        for (String allowedExtension : allowedExtensionArray) {
            if (allowedExtension.trim().equalsIgnoreCase(fileExtension)) {
                return true;
            }
        }
        return false;
    }

    /**
     * 接口名称:个人信息—修改图片
     * 接口请求 :localhost:8801/api/appapi/UploadAvatar
     * 请求方式 :post
     * 添加token:是
     *
     * @return
     */
    @PostMapping("/UploadAvatar")
    public Result uploadAvatar(@ApiParam("文件二进制数据") @RequestPart("file") MultipartFile file) {

        log.error("上传文件 = " + file);
        if (Objects.isNull(file)) {
            return Result.error("找不到文件!");
        }

        if (file.getSize() == 0) {
            return Result.error("未选择上传文件");
        }

        String fileName = file.getOriginalFilename(); // 获取文件名
        String fileExtension = null; // 获取文件扩展名
        if (fileName != null) {
            fileExtension = getFileExtension(fileName);
        }
        String allowedExtensions = "jpg,jpeg,png,gif"; // 允许的文件扩展名
        boolean isValidExtension = isAllowedExtension(fileExtension, allowedExtensions);
        if (isValidExtension) {
            // 处理文件上传逻辑
            // 服务器的图片存储地址
            File baseDir = new File("C:\\DLY_img\\\\");//存储地址
            String now = new SimpleDateFormat("yyyy-MM").format(new Date());
            String text_dir = baseDir + "\\" + now;
            // 判断文件夹是否存在
            if (!Files.exists(Paths.get(text_dir))) {
                //  Files.createDirectories(Paths.get(text_dir));

                // 创建文件夹
                File folder = new File(Paths.get(text_dir).toString());
                if (!folder.exists()) {
                    folder.mkdir();
                    log.debug("目录创建成功");
                }
            }
            String time_str = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());
            String file_path = "\\" + now + "\\" + time_str + "_" + fileName;
            String file_ = now + "\\" + time_str + "_" + fileName; // 数据库保存的名字
            String save_path = baseDir + file_path; // 服务器路径
            // 创建文件
            File saveFile = new File(save_path);
            if (!saveFile.exists()) {
                try {
                    saveFile.createNewFile();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            try {
                //获取当前用户 US_CODE
                String token = Objects.requireNonNull(JwtTokenUtils.getCurrentUser()).getUS_CODE();
                //创建BizWxPasser对象
                BizWxPasser wx = new BizWxPasser();
                //设置PASSER_CODE
                wx.setPASSER_CODE(token);
                //设置NICK_NAME
                wx.setNICK_NAME(Objects.requireNonNull(JwtTokenUtils.getCurrentUser()).getUS_TEXT());
                //判断bizWxPasserMapper.allByPASSER_CODE(token)是否为空
                BizWxPasser bizWxPasser = bizWxPasserMapper.allByPASSER_CODE(token);
                if (Objects.isNull(bizWxPasser)) {
                    //设置OPEN_ID
                    wx.setOPEN_ID("");
                    //设置WX_HEAD_URL
                    wx.setWX_HEAD_URL("");
                    //添加BizWxPasser
                    bizWxPasserMapper.addBizWxPasser(wx);
                }
                //设置WX_HEAD_URL
                wx.setWX_HEAD_URL(file_);
                //将文件保存到saveFile
                //file.transferTo(saveFile);
                try (FileOutputStream fos = new FileOutputStream(saveFile)) {
                    fos.write(file.getBytes());
                } catch (IOException e) {
                    log.error("文件保存异常=" + e);
                    throw new CustomException("上传图片保存失败,请稍后再试~");
                }
                String del_path = baseDir + "\\" + bizWxPasser.getWX_HEAD_URL(); // 服务器路径
                File delFile = new File(del_path);
                boolean delete = delFile.delete();
                if (!delete) {
                    log.error("删除文件异常=" + del_path);
                }

                //更新BizWxPasser
                bizWxPasserMapper.upBizWxPasser(wx);
                //设置url
                String url = "http:\\/\\/head.img.ynjs.cc\\/";
                //返回成功结果
                return Result.success(url + file_);
            } catch (Exception e) {
                log.debug("上传异常 = " + e);
                //返回上传失败结果
                return Result.error("上传图片保存失败,请稍后再试~" + e);
            }
        } else {
            //返回不允许上传该文件格式结果
            return Result.error("不允许上传该文件格式");
        }
    }
}

解释代码

好吧,懒得解释反正挺简单,反复看几遍就明白了!

开玩笑

有些代码还是要解释一下的

  • 这是用来获取文件的后缀名的
 private static String getFileExtension(String fileName) {
        int dotIndex = fileName.lastIndexOf(".");
        if (dotIndex > 0 && dotIndex < fileName.length() - 1) {
            return fileName.substring(dotIndex + 1).toLowerCase();
        }
        return "";
    }

    private static boolean isAllowedExtension(String fileExtension, String allowedExtensions) {
        String[] allowedExtensionArray = allowedExtensions.split(",");
        for (String allowedExtension : allowedExtensionArray) {
            if (allowedExtension.trim().equalsIgnoreCase(fileExtension)) {
                return true;
            }
        }
        return false;
    }
  • MultipartFile 是spring boot的上传文件的类,这个注解是将文件转换成二进制
@RequestPart("file") MultipartFile file
  • 在多看看(注释多有的)
@PostMapping("/UploadAvatar")
    public Result uploadAvatar(@ApiParam("文件二进制数据") @RequestPart("file") MultipartFile file) {

        log.error("上传文件 = " + file);
        if (Objects.isNull(file)) {
            return Result.error("找不到文件!");
        }

        if (file.getSize() == 0) {
            return Result.error("未选择上传文件");
        }

        String fileName = file.getOriginalFilename(); // 获取文件名
        String fileExtension = null; // 获取文件扩展名
        if (fileName != null) {
            fileExtension = getFileExtension(fileName);
        }
        String allowedExtensions = "jpg,jpeg,png,gif"; // 允许的文件扩展名
        boolean isValidExtension = isAllowedExtension(fileExtension, allowedExtensions);
        if (isValidExtension) {
            // 处理文件上传逻辑
            // 服务器的图片存储地址
            File baseDir = new File("C:\\DLY_img\\\\");//存储地址
            String now = new SimpleDateFormat("yyyy-MM").format(new Date());
            String text_dir = baseDir + "\\" + now;
            // 判断文件夹是否存在
            if (!Files.exists(Paths.get(text_dir))) {
                //  Files.createDirectories(Paths.get(text_dir));

                // 创建文件夹
                File folder = new File(Paths.get(text_dir).toString());
                if (!folder.exists()) {
                    folder.mkdir();
                    log.debug("目录创建成功");
                }
            }
            String time_str = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());
            String file_path = "\\" + now + "\\" + time_str + "_" + fileName;
            String file_ = now + "\\" + time_str + "_" + fileName; // 数据库保存的名字
            String save_path = baseDir + file_path; // 服务器路径
            // 创建文件
            File saveFile = new File(save_path);
            if (!saveFile.exists()) {
                try {
                    saveFile.createNewFile();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            try {
                try (FileOutputStream fos = new FileOutputStream(saveFile)) {
                    fos.write(file.getBytes());
                } catch (IOException e) {
                    log.error("文件保存异常=" + e);
                    throw new CustomException("上传图片保存失败,请稍后再试~");
                }
                String del_path = baseDir + "\\" + bizWxPasser.getWX_HEAD_URL(); // 服务器路径
                File delFile = new File(del_path);
                boolean delete = delFile.delete();
                if (!delete) {
                    log.error("删除文件异常=" + del_path);
                }
                //更新到数据库
                
                //返回成功结果
                return Result.success("添加成功");
            } catch (Exception e) {
                log.debug("上传异常 = " + e);
                //返回上传失败结果
                return Result.error("上传图片保存失败,请稍后再试~" + e);
            }
        } else {
            //返回不允许上传该文件格式结果
            return Result.error("不允许上传该文件格式");
        }
    }

有什么问题可以一起交流,共同进步!!!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/205597.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!