zoukankan      html  css  js  c++  java
  • Spring Boot 文件操作,上传、浏览和删除

    视频演示: https://www.bilibili.com/video/BV1rv411B7fs/

    一起来完成以下步骤:

    该工程演示Spring Boot如何上传、展示和删除文件

    1. 页面引擎采用Thymeleaf
    2. 后端使用Spring Boot
    3. 文件上传使用Form提交方式(而不是Ajax方式或VUE前后端分离)

    #FileControlle.java

    package com.deepincoding.fileuploadformpage;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.core.io.Resource;
    import org.springframework.core.io.UrlResource;
    import org.springframework.http.HttpHeaders;
    import org.springframework.http.ResponseEntity;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.util.FileSystemUtils;
    import org.springframework.util.StringUtils;
    import org.springframework.web.bind.annotation.*;
    import org.springframework.web.multipart.MultipartFile;
    import org.springframework.web.servlet.mvc.method.annotation.MvcUriComponentsBuilder;
    
    import java.io.IOException;
    import java.net.MalformedURLException;
    import java.nio.file.Files;
    import java.nio.file.Path;
    import java.nio.file.Paths;
    import java.nio.file.StandardCopyOption;
    import java.util.List;
    import java.util.stream.Collectors;
    
    @Controller
    public class FileController {
    
        //上传文件路径
        @Value("${file.base.director}")
        private String fileBaseDirector;
        private Path fileBasePath;
    
        @Autowired
        private void createDirectories(){
            try {
                Files.createDirectories(Paths.get(fileBaseDirector));
            } catch (IOException e) {
                e.printStackTrace();
            }
            this.fileBasePath = Path.of(fileBaseDirector);
        }
    
        /**
         * 首页
         * @return
         */
        @GetMapping("/")
        public String index(){
            return "index";
        }
    
        /**
         * 上传页面
         * @return
         */
        @GetMapping("/upload")
        public String upload(){
            return "upload";
        }
    
        /**
         * 获取文件列表
         * @return
         * @throws IOException
         */
        @GetMapping("/files")
        public String files(Model model)  throws IOException {
            List<FileObject> filesAll = Files.walk(fileBasePath,1)
                    .filter(path -> !path.equals(fileBasePath))
                    .map(path -> {
                        String url = MvcUriComponentsBuilder.fromMethodName(FileController.class,"loadFile",path.getFileName().toString()).build().toString();
                        FileObject  fileObject = new FileObject(path.getFileName().toString(),url);
                        return fileObject;
                    }).collect(Collectors.toList());
            model.addAttribute("files",filesAll);
            return "files";
        }
    
        /**
         * 删除文件
         * @param fileName
         * @return
         */
        @GetMapping("/delete/{fileName}")
        public String deleteFile(@PathVariable String fileName){
            Path deletePath = fileBasePath.resolve(fileName);
            Boolean isDelete = Boolean.FALSE;
            try {
                isDelete = FileSystemUtils.deleteRecursively(deletePath);
            } catch (IOException e) {
                e.printStackTrace();
            }
            return "redirect:/files";
        }
    
        
        /**
         * 上传文件事件
         * @param file
         * @return
         */
        @PostMapping("/upload")
        public String upload(@RequestParam("file") MultipartFile file){
            String fileName = StringUtils.cleanPath(file.getOriginalFilename());
            Path path = Path.of(fileBaseDirector + fileName);
            try {
                Files.copy(file.getInputStream(),path,StandardCopyOption.REPLACE_EXISTING);
            } catch (IOException e) {
                e.printStackTrace();
            }
            return "redirect:/files";
        }
    
    
    }
    
    

     

  • 相关阅读:
    关于自发电的一些想法
    折腾了一个晚上的业余时间,终于把一块廉价的tftlcd连到了我的树莓派上
    关于飞行器从外太空返回地球时候的减速器的思考与假象
    echart漏斗图背景多出一个方框的问题解决,浪费了两个小时的教训
    linux加密文件系统 fsck 无法修复一例
    天津
    [转]Bitmap图片缩放
    python spark 配置
    screen
    tar 命令
  • 原文地址:https://www.cnblogs.com/JavaWeiBianCheng/p/13192495.html
Copyright © 2011-2022 走看看