从松哥的微信公众号上面看到了SpringBoot+Vue实现文件上传+预览的视频教程,如下图所示:
跟着做,使用IDEA一遍看一边做,没想到由于自己马虎将日期SimpleDateFormat simpleDateFormat = new SimpleDateFormat("/yyyy/MM/dd/");写成了SimpleDateFormat simpleDateFormat = new SimpleDateFormat("/yyyy/MM/dd");导致后续拼接文件名出错: 由于在本地地址生成pdf文件失败导致无法实现预览PDF文件的效果。 最后将日期格式修改后成功上传并且可以实现pdf文件预览。
使用IDEA创建一个基于SpringBoot的项目,依赖选择Spring Web,我的pom.xml文件如下所示:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.3.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>org.javaboy</groupId> <artifactId>fileupload</artifactId> <version>0.0.1-SNAPSHOT</version> <name>fileupload</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <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> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>为了简单直接在resources/static目录下创建index.html,并且引入vue.js和elment-ui,具体可以参考Element-UI安装 对应的页面内容如下图所示:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <!-- import CSS --> <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css"> </head> <body> <div id="app"> <el-upload action="/upload" :on-preview="handlePreview" multiple :limit="10" accept=".pdf"> <el-button size="small" type="primary">点击上传</el-button> <div slot="tip" class="el-upload__tip">只能上传pdf文件,且不超过100MB</div> </el-upload> </div> </body> <!-- import Vue before Element --> <script src="https://unpkg.com/vue/dist/vue.js"></script> <!-- import JavaScript --> <script src="https://unpkg.com/element-ui/lib/index.js"></script> <script> new Vue({ el: '#app', methods: { handlePreview(file) { console.log(file); window.open( file.response.url); } } }) </script> </html>这里使用了Element-UI的el-upload组件,如下所示:
SpringBoot对于上传的文件大小有限制,所以需要在application.properties文件中增加几个配置,如下:
#配置文件传输 spring.servlet.multipart.enabled =true spring.servlet.multipart.file-size-threshold =0 #设置单个文件上传的数据大小 spring.servlet.multipart.max-file-size = 100MB #设置总上传的数据大小 spring.servlet.multipart.max-request-size=100MB我这里设置单文件上传的最大大小为100MB和总共文件的大小为100MB
相关代码我已经上传至我的Github和Gitee码云仓库上面了,需要的话可自行获取
Github-fileuploadGitee-fileupload