IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 【SpringBoot】文件上传 -> 正文阅读

[Java知识库]【SpringBoot】文件上传

一、配置信息

# 与spring 同级
file:
  accessPath: /upfs/ #程序映射路径
  staticAccessPath: /upfs/** #允许的程序映射路径
  uploadFolder: D://temp/ #真实路径

二、配置上传参数

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
@Data
public class FileUploadConfig implements WebMvcConfigurer {

    @Value("${file.staticAccessPath}")
    private String staticAccessPath;
    @Value("${file.uploadFolder}")
    private String uploadFolder;

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler(staticAccessPath).addResourceLocations("file:" + uploadFolder);//在web里添加新的一条文件路径
    }  
}

三、controller部分

@RestController
@CrossOrigin
@RequestMapping("/file")
@SuppressWarnings("unchecked")
public class FileUploadController {

    @Value("${file.uploadFolder}")
    private String realBasePath;
    @Value("${file.accessPath}")
    private String accessPath;

    @Resource
    private Environment environment;    

    //文件上传服务
    @PostMapping(value = "/upload")
    @ResponseBody
    @CrossOrigin(origins = "*", maxAge = 3600)
    public List<String> fileUpload(@RequestParam("file") MultipartFile[] files, Integer fullUrl) {
        List<String> result = new ArrayList<>();

        if (files == null || files.length <= 0) {
            return result;
        }
        for (int i = 0; i < files.length; i++) {
            if (files[i].isEmpty()) {
				 return result;
            }
        }

        try {
            return uploadFile(files);
        } catch (Exception e) {}
        
        return result;
    }

    private List<String> uploadFile(MultipartFile[] files) {
        List<String> result=new ArrayList<>();
        //判断文件是否合法
        String fileName="";
        for (int i = 0; i < files.length; i++) {
            fileName = files[i].getOriginalFilename();
            try {
                String url =saveFile(files[i]);
                result.add(url);
            } catch (Exception e) {}
                return result;
            }
        }
        return result;
    }

    private String saveFile(MultipartFile file) throws Exception{
    
        String   fileName = file.getOriginalFilename();
        String fileSuffix = fileName.substring(fileName.lastIndexOf(".") + 1);
        InputStream inputStream = file.getInputStream();
        // 文件唯一的名字
        String newFileName = UUID.randomUUID().toString() + "." + fileSuffix;
        Date todayDate = new Date();
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        String today = dateFormat.format(todayDate);
        // 域名访问的相对路径(通过浏览器访问的链接-虚拟路径)
        String saveToPath = accessPath + today + "/"; // /upfs/2022-04-17/
        // 真实路径,实际储存的路径
        String realPath = realBasePath + today + "/";
        // 储存文件的物理路径,使用本地路径储存
        String filepath = realPath + newFileName;// D://temp/2022-04-17/1.jpg

        // 判断有没有对应的文件夹
        File destFile = new File(filepath);
        if (!destFile.getParentFile().exists()) {
            Boolean b = destFile.getParentFile().mkdirs();
        }

        // 输出流 输出到文件
        OutputStream outputStream = new FileOutputStream(destFile);
        // 缓冲区
        byte[] bs = new byte[1024];
        int len = -1;
        while ((len = inputStream.read(bs)) != -1) {
            outputStream.write(bs, 0, len);
        }
        inputStream.close();
        outputStream.close();
        
        return saveToPath + newFileName;
    }
}
  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-04-18 17:27:33  更:2022-04-18 17:28:30 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 4:43:23-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码