全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

基于SpringBoot上传任意文件功能的实现

一、pom文件依赖的添加

<dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
  </dependencies>

二、controller层

@Controller
public class FileUploadController {
  private final StorageService storageService;

  @Autowired
  public FileUploadController(StorageService storageService) {
    this.storageService = storageService;
  }

  //展示上传过的文件
  @GetMapping("/")
  public String listUploadedFiles(Model model) throws IOException {

    model.addAttribute("files", storageService.loadAll().map(path ->
            MvcUriComponentsBuilder.fromMethodName(FileUploadController.class, "serveFile", path.getFileName().toString())
            .build().toString())
        .collect(Collectors.toList()));

    return "uploadForm";
  }

  //下载选定的上传的文件
  @GetMapping("/files/{filename:.+}")
  @ResponseBody
  public ResponseEntity<Resource> serveFile(@PathVariable String filename) {

    Resource file = storageService.loadAsResource(filename);
    return ResponseEntity
        .ok()
        .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\""+file.getFilename()+"\"")
        .body(file);
  }

  //上传文件
  @PostMapping("/")
  public String handleFileUpload(@RequestParam("file") MultipartFile file,
                  RedirectAttributes redirectAttributes) {

    storageService.store(file);
    redirectAttributes.addFlashAttribute("message",
        "You successfully uploaded " + file.getOriginalFilename() + "!");

    return "redirect:/";
  }

  @ExceptionHandler(StorageFileNotFoundException.class)
  public ResponseEntity<?> handleStorageFileNotFound(StorageFileNotFoundException exc) {
    return ResponseEntity.notFound().build();
  }
}

三、实现的service层

@Service
public class FileSystemStorageService implements StorageService {

  private final Path rootLocation;

  @Autowired
  public FileSystemStorageService(StorageProperties properties) {
    this.rootLocation = Paths.get(properties.getLocation());
  }

  @Override
  public void store(MultipartFile file) {
    try {
      if (file.isEmpty()) {
        throw new StorageException("Failed to store empty file " + file.getOriginalFilename());
      }
      Files.copy(file.getInputStream(), this.rootLocation.resolve(file.getOriginalFilename()));
    } catch (IOException e) {
      throw new StorageException("Failed to store file " + file.getOriginalFilename(), e);
    }
  }

  @Override
  public Stream<Path> loadAll() {
    try {
      return Files.walk(this.rootLocation, 1)
          .filter(path -> !path.equals(this.rootLocation))
          .map(path -> this.rootLocation.relativize(path));
    } catch (IOException e) {
      throw new StorageException("Failed to read stored files", e);
    }

  }

  @Override
  public Path load(String filename) {
    return rootLocation.resolve(filename);
  }

  @Override
  public Resource loadAsResource(String filename) {
    try {
      Path file = load(filename);
      Resource resource = new UrlResource(file.toUri());
      if(resource.exists() || resource.isReadable()) {
        return resource;
      }
      else {
        throw new StorageFileNotFoundException("Could not read file: " + filename);

      }
    } catch (MalformedURLException e) {
      throw new StorageFileNotFoundException("Could not read file: " + filename, e);
    }
  }

  @Override
  public void deleteAll() {
    FileSystemUtils.deleteRecursively(rootLocation.toFile());
  }

  @Override
  public void init() {
    try {
      Files.createDirectory(rootLocation);
    } catch (IOException e) {
      throw new StorageException("Could not initialize storage", e);
    }
  }
}

四、在application.properties文件上配置上传的属性

spring.http.multipart.max-file-size=128KB
spring.http.multipart.max-request-size=128KB

五、服务启动时的处理

六、测试成功的结果

以上这篇基于SpringBoot上传任意文件功能的实现就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。


# SpringBoot上传任意文件  # 详解SpringBoot文件上传下载和多文件上传(图文)  # springboot实现文件上传和下载功能  # SpringBoot实现文件上传下载功能小结  # springboot 文件上传大小配置的方法  # SpringBoot限制文件或图片上传大小的两种配置方法  # SpringBoot文件上传控制及Java 获取和判断文件头信息  # 全面解析SpringBoot文件上传功能  # Springboot上传excel并将表格数据导入或更新mySql数据库的过程  # SpringBoot 文件上传和下载的实现源码  # SpringBoot+fileUpload获取文件上传进度  # 上传  # 给大家  # 希望能  # 这篇  # 小编  # 启动时  # 大家多多  # 上传文件  # fromMethodName  # serveFile  # MvcUriComponentsBuilder  # path  # build  # collect  # getFileName  # toString  # map  # model  # throws  # listUploadedFiles 


相关文章: 设计网站制作公司有哪些,制作网页教程?  内部网站制作流程,如何建立公司内部网站?  建站之星安装后如何自定义网站颜色与字体?  网站建设制作、微信公众号,公明人民医院怎么在网上预约?  C++用Dijkstra(迪杰斯特拉)算法求最短路径  临沂网站制作企业,临沂第三中学官方网站?  如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?  建站之星如何配置系统实现高效建站?  视频网站制作教程,怎么样制作优酷网的小视频?  外贸公司网站制作哪家好,maersk船公司官网?  西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?  已有域名如何快速搭建专属网站?  安徽网站建设与外贸建站服务专业定制方案  深圳企业网站制作设计,在深圳如何网上全流程注册公司?  如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南  建站之星微信建站一键生成小程序+多端营销系统  商务网站制作工程师,从哪几个方面把握电子商务网站主页和页面的特色设计?  西安制作网站公司有哪些,西安货运司机用的最多的app或者网站是什么?  济南网站制作的价格,历城一职专官方网站?  高性能网站服务器配置指南:安全稳定与高效建站核心方案  javascript中对象的定义、使用以及对象和原型链操作小结  可靠的网站设计制作软件,做网站设计需要什么样的电脑配置?  建站之星备案流程有哪些注意事项?  怎么将XML数据可视化 D3.js加载XML  如何在宝塔面板中创建新站点?  Python如何创建带属性的XML节点  Android使用GridView实现日历的简单功能  专业的网站制作设计是什么,如何制作一个企业网站,建设网站的基本步骤有哪些?  h5网站制作工具有哪些,h5页面制作工具有哪些?  网页设计网站制作软件,microsoft office哪个可以创建网页?  公司门户网站制作流程,华为官网怎么做?  学校建站服务器如何选型才能满足性能需求?  浙江网站制作公司有哪些,浙江栢塑信息技术有限公司定制网站做的怎么样?  利用JavaScript实现拖拽改变元素大小  如何快速使用云服务器搭建个人网站?  公司网站制作需要多少钱,找人做公司网站需要多少钱?  建站之星后台密码如何安全设置与找回?  宁波自助建站系统如何快速打造专业企业网站?  网站制作与设计教程,如何制作一个企业网站,建设网站的基本步骤有哪些?  建站之星免费模板:自助建站系统与智能响应式一键生成  如何选择可靠的免备案建站服务器?  建站之星3.0如何解决常见操作问题?  如何高效利用亚马逊云主机搭建企业网站?  如何用低价快速搭建高质量网站?  如何注册花生壳免费域名并搭建个人网站?  想学网站制作怎么学,建立一个网站要花费多少?  如何快速搭建高效WAP手机网站吸引移动用户?  如何选择长沙网站建站模板?H5响应式与品牌定制哪个更优?  如何高效生成建站之星成品网站源码?  如何通过老薛主机一键快速建站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。