博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring Boot入门(8)文件上传和数据预览
阅读量:6673 次
发布时间:2019-06-25

本文共 6800 字,大约阅读时间需要 22 分钟。

介绍

  本次分享将具体介绍如何在Spring Boot中实现文件上传和数据预览。

  我们将实现CSV文件的数据预览和部分图片格式的查看。主要的思路如下:

  • 利用Spring Boot的MultipartFile实现文件的上传;
  • 利用Spring MVC实现整个文件上传流程的控制;
  • 利用javacsv API实现CSV文件的读取;
  • 利用JavaScript实现CSV文件的数据预览

  话不多说,我们直接上项目!

项目介绍

  整个项目的结构如下:

整个项目的结构

  主要是两部分的内容,一部分是Controller(控制器),一部分是view(视图)文件。UploadController.java是控制器,其代码如下:

package com.hello.upload.Controller;import java.util.*;import java.io.IOException;import java.nio.file.Files;import java.nio.file.Path;import java.nio.file.Paths;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.*;import org.springframework.web.multipart.MultipartFile;import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;import org.springframework.web.servlet.mvc.support.RedirectAttributes;@Controllerpublic class UploadController{    private String filename;    //Save the uploaded file to this folder    private static String UPLOADED_FOLDER = "E://upload/src/main/resources/static/images/";    /*    **文件上传页面     */    @GetMapping("/upload")    public String upload(){        return "upload";    }    @PostMapping("/upload")    public String singleFileUpload(@RequestParam("file") MultipartFile file,                                   RedirectAttributes redirectAttributes) {        if (file.isEmpty()) {            redirectAttributes.addFlashAttribute("message", "文件为空! 请选择非空文件上传!");            return "redirect:/uploadStatus";        }        try {            // 获取文件并保存到指定文件夹中            byte[] bytes = file.getBytes();            filename = file.getOriginalFilename();            Path path = Paths.get(UPLOADED_FOLDER + filename);            Files.write(path, bytes);            redirectAttributes.addFlashAttribute("message", "您已成功上传 '" + filename + "', 该文件大小约为 " +bytes.length/1024+" KB.");        }        catch (IOException e) {            e.printStackTrace();        }        return "redirect:/uploadStatus";    }    /*    ** 文件上传信息处理页面     */    @GetMapping("/uploadStatus")    public String uploadStatus(){        return "uploadStatus";    }    /*    ** 数据预览页面: 支持CSV文件和部分图片格式的预览     */    @GetMapping("/review")    public String review(Map
map) { map.put("filename", filename); String filetype = filename.split("\\.")[1]; map.put("filetype",filetype); System.out.println(filename); if(filetype.equals("csv")) { readCSV read_csv = new readCSV(UPLOADED_FOLDER + filename); List
result = read_csv.read(); map.put("result", result); } return "review"; }}

  文件上传的错误处理包含在代码GlobalExceptionHandler.java中,其代码如下:

package com.hello.upload.Controller;import org.springframework.web.bind.annotation.ControllerAdvice;import org.springframework.web.bind.annotation.ExceptionHandler;import org.springframework.web.multipart.MultipartException;import org.springframework.web.servlet.mvc.support.RedirectAttributes;@ControllerAdvicepublic class GlobalExceptionHandler {    @ExceptionHandler(MultipartException.class)    public String handleError1(MultipartException e, RedirectAttributes redirectAttributes) {        redirectAttributes.addFlashAttribute("message", e.getCause().getMessage());        return "redirect:/uploadStatus";    }}

  接着readCSV.java主要实现CSV文件内容的读取,其代码如下:

package com.hello.upload.Controller;import java.io.IOException;import java.util.ArrayList;import java.util.List;import com.csvreader.CsvReader;/*** readCSV类:实现CSV文件内容的读取 */public class readCSV {    // 参数:文件路径    private String file_path;    // 构造函数    readCSV(){}    readCSV(String file_path){        this.file_path = file_path;    }    // getter and setter    public String getFile_path() {        return file_path;    }    public void setFile_path(String file_path) {        this.file_path = file_path;    }    // read()函数实现具体的读取CSV文件内容的方法    public List
read() { List
result = new ArrayList<>(); try { // 创建CSV读对象 CsvReader csvReader = new CsvReader(file_path); while (csvReader.readRecord()){ // 读取每一行数据,以逗号分开 // System.out.println(csvReader.getRawRecord()); result.add(csvReader.getRawRecord()); } csvReader.close(); return result; } catch (IOException e) { e.printStackTrace(); return result; } }}

  接着是视图部分,文件都位于templates文件夹下。upload.html文件主要是文件上传的页面,其代码如下:

    Upload files by Spring Boot    

文件上传

  uploadStatus.html文件主要用来展示文件上传的信息,包括上传成功和失败的信息,其代码如下:

    

文件上传状态

文件上传

  接着是数据预览部分的HTML,主要实现CSV文件的预览和部分图片格式的查看,其代码如下:

    
文件预览

  最后将以下我们的配置文件,application.properties代码如下:

server.port=8100spring.servlet.multipart.max-file-size=5MBspring.servlet.multipart.max-request-size=5MBspring.http.multipart.enabled=false

其设置网络端口为8100,每次上传的文件大小不超过5MB.项目构建文件build.gradle的代码如下:

buildscript {    ext {        springBootVersion = '2.0.1.RELEASE'    }    repositories {        mavenCentral()    }    dependencies {        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")    }}apply plugin: 'java'apply plugin: 'eclipse'apply plugin: 'org.springframework.boot'apply plugin: 'io.spring.dependency-management'group = 'com.hello'version = '0.0.1-SNAPSHOT'sourceCompatibility = 1.8repositories {    mavenCentral()}dependencies {    compile('org.springframework.boot:spring-boot-starter-thymeleaf')    compile('org.springframework.boot:spring-boot-starter-web')    compile group: 'net.sourceforge.javacsv', name: 'javacsv', version: '2.0'    testCompile('org.springframework.boot:spring-boot-starter-test')}

运行及测试

  好不容易写完了项目,不测试一把,对不起观众啊。

  启动Spring Boot项目,在浏览器中输入::8100/upload,页面如下:

上传文件页面

  选择本地的mpg.csv文件上传,它将会上传至E://upload/src/main/resources/static/images/ 文件夹中,上传成功后的页面如下图:

文件上传成功

  点击数据预览按钮,跳转到review.html页面,再点击该页面的数据预览按钮,显示的页面如下图:

CSV文件预览

  当然也支持部分图片格式的预览,例如:movie.jpg,如下图:

图片预览

  当上传文件大于5MB时,显示的信息如下:

错误信息展示

  本次分享到此结束,该项目的Github地址为: 。 接下来还会继续更新Spring Boot方面的内容,欢迎大家交流~~

转载地址:http://nqgxo.baihongyu.com/

你可能感兴趣的文章
分布式应急响应
查看>>
iso定制封装
查看>>
精通MVC3摘译(8)-处理输出(2)
查看>>
字符串翻转之实现二
查看>>
Windows server 2008 Hyper-v下,玩转office communicator Server 2007 Enterprise
查看>>
Agent监控软件在IT工作中的应用
查看>>
Silverlight + WCF错误“The remote server returned an error: NotFound.”的解决方法
查看>>
内核调优记录file-max
查看>>
stream 实现异构数据表的传输
查看>>
机器视觉系统设计数字相机与模拟相机的优势比较
查看>>
RHEL 5基础篇—linux的简介
查看>>
Windows Server 2008 R2之五操作主控的管理
查看>>
java.lang.UnsupportedClassVersionError: Bad version number in .class file
查看>>
grub启动引导装载程序总结。
查看>>
XIV(3)--Read/Write Operations
查看>>
route OS(MikroTik)2.9.27初探
查看>>
tomcat配置优化
查看>>
[转]Javascript 中 String.replace( ) 的妙用
查看>>
分布式系统开发的一些相关理论基础——CAP、ACID、BASE
查看>>
探讨防火墙内核监听模式:ISA2006系列之十六
查看>>