1.预览:
1.1
1.2
1.3
复制这个url到浏览器:
上传视频的话,复制视频url到浏览器:
2.代码相关部分:
先创建一个表shipins:
name:上传的文件名字,lujing:文件在硬盘的路径,url:可直接访问的链接。
idea创建一个springboot项目:
1.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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.shipin</groupId>
<artifactId>shangchuan</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>shangchuan</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!-- spring boot web支持:mvc,aop... -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!-- 过滤springboot默认嵌入式tomcat插件 -->
<!--<exclusions>-->
<!--<exclusion>-->
<!--<groupId>org.springframework.boot</groupId>-->
<!--<artifactId>spring-boot-starter-tomcat</artifactId>-->
<!--</exclusion>-->
<!--</exclusions>-->
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--thymeleaf模板-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
<!--MyBatis依赖jar包和MySQL连接相关的jar包-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.1</version>
</dependency>
<!--打包添加的依赖-->
<!--添加发布依赖-->
<!--<dependency>-->
<!--<groupId>org.springframework.boot</groupId>-->
<!--<artifactId>spring-boot-starter-tomcat</artifactId>-->
<!--<scope>provided</scope>-->
<!--</dependency>-->
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2.application.properties文件:
# url path
#server.port=8088
#server.servlet.context-path=/shipin
# thymeleaf
spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.suffix=.html
spring.thymeleaf.mode=HTML
spring.thymeleaf.encoding=UTF-8
#spring.thymeleaf.content-type
spring.thymeleaf.servlet.content-type=text/html
# 开发阶段务必关闭缓存 (=false)
spring.thymeleaf.cache=false
#最大文件大小。值可以使用后缀“MB”或“KB”。指示兆字节或千字节大小。
spring.servlet.multipart.max-file-size=-1
# 最大请求大小可以是mb也可以是kb
spring.servlet.multipart.max-request-size=-1
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/表名?useUnicode=true&characterEncoding=utf-8&useSSL=false
spring.datasource.username=mysql账号
spring.datasource.password=mysql密码
logging.level.com.shengquan.registeradmin.dao=debug
#配置外部访问文件(把上传的图片视频文件放到E盘下的fileUpload文件夹下)
cbs.imagesPath=file:/E:/fileUpload/
#com.yangyouqi: ${server.port}
#spring.jmx.enabled=false
3.上传配置类:
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.servlet.MultipartConfigFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.*;
import javax.servlet.MultipartConfigElement;
//上传配置类
//图片放到/F:/fileUpload/后,从磁盘读取的图片数据scr将会变成images/picturename.jpg的格式
@Configuration
public class WebAppConfig extends WebMvcConfigurerAdapter {
//public class WebAppConfig extends WebMvcConfigurationSupport {
/**
* 在配置文件中配置的文件保存路径
*/
@Value("${cbs.imagesPath}")
private String mImagesPath;
@Bean
public MultipartConfigElement multipartConfigElement(){
MultipartConfigFactory factory = new MultipartConfigFactory();
//文件最大KB,MB
factory.setMaxFileSize("1024MB");
//设置总上传数据总大小
factory.setMaxRequestSize("1024MB");
return factory.createMultipartConfig();
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
if(mImagesPath.equals("") || mImagesPath.equals("${cbs.imagesPath}")){
String imagesPath = WebAppConfig.class.getClassLoader().getResource("").getPath();
System.out.print("1.上传配置类imagesPath=="+imagesPath+"\n");
if(imagesPath.indexOf(".jar")>0){
imagesPath = imagesPath.substring(0, imagesPath.indexOf(".jar"));
}else if(imagesPath.indexOf("classes")>0){
imagesPath = "file:"+imagesPath.substring(0, imagesPath.indexOf("classes"));
}
imagesPath = imagesPath.substring(0, imagesPath.lastIndexOf("/"))+"/images/";
mImagesPath = imagesPath;
}
System.out.print("imagesPath============="+mImagesPath+"\n");
//LoggerFactory.getLogger(WebAppConfig.class).info("imagesPath============="+mImagesPath+"\n");
registry.addResourceHandler("/images/**").addResourceLocations(mImagesPath);
// TODO Auto-generated method stub
System.out.print("2.上传配置类mImagesPath=="+mImagesPath+"\n");
super.addResourceHandlers(registry);
}
}
启动类:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
//import org.springframework.boot.builder.SpringApplicationBuilder;
//import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
//import org.springframework.web.WebApplicationInitializer;
@SpringBootApplication
public class ShangchuanApplication {
//public class ShangchuanApplication extends SpringBootServletInitializer implements WebApplicationInitializer {
// // 打包war需要这个启动类,发布到服务器上
// @Override
// protected SpringApplicationBuilder configure(SpringApplicationBuilder application){
// System.out.print("视频上传项目启动类2.==="+"\n");
// return application.sources(ShangchuanApplication.class);
// }
public static void main(String[] args) {
System.out.print("视频上传项目启动类1.==="+"\n");
SpringApplication.run(ShangchuanApplication.class, args);
}
}
4.项目整体结构:
5.dao层:
import com.shipin.shangchuan.model.Shipin;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Component;
import java.util.List;
@Mapper
@Component
public interface ShiPinDao {
//插入
@Insert({"insert into shipins (name,lujing,url) values (#{name},#{lujing},#{url})"})
public int insertUrl(@Param("name")String name,@Param("lujing")String lujing,@Param("url")String url);
//查询
@Select("select * from shipins")
public List<Shipin> selectShipin();
}
6.model层:
public class Shipin {
private int id;
private String url;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
}
7.service层:
import com.shipin.shangchuan.dao.ShiPinDao;
import com.shipin.shangchuan.model.Shipin;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
@Component
public class ShiPinService {
@Autowired
private ShiPinDao shiPinDao;
//插入
public int insertUrl(String name,String lujing,String url){
System.out.print("开始插入=name=="+name+"\n");
System.out.print("开始插入=lujing=="+lujing+"\n");
System.out.print("开始插入=url=="+url+"\n");
int jieguo=shiPinDao.insertUrl(name,lujing,url);
System.out.print("插入结果==="+jieguo+"\n");
return jieguo;
}
//查询
public List<Shipin> selectShipin(){
List<Shipin> shipins=shiPinDao.selectShipin();
return shipins;
}
}
8.controller层:
页面跳转类:
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class FileUploadController {
//访问路径为:http://localhost:8080/file
@RequestMapping("/file")
public String file(){
System.out.print("================请求路径===跳转file页面====="+"\n");
return "/file";
}
// @RequestMapping("/shangchuan")
//
// public String shangchuan(){
// System.out.print("================请求路径===跳转index页面====="+"\n");
// return "/index";
//
// }
}
处理上传类:
import com.shipin.shangchuan.model.Shipin;
import com.shipin.shangchuan.service.ShiPinService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
@Controller
//@RequestMapping("/file")
public class MyfileCOntroller {
@Autowired
private ShiPinService shiPinService;
private String url;
@RequestMapping(value="/uploadFile",produces="application/json;charset=UTF-8")
@ResponseBody
public String uploadFile(@RequestParam("fileName") MultipartFile file) {
System.out.print("上传文件==="+"\n");
//判断文件是否为空
if (file.isEmpty()) {
return "上传文件不可为空";
}
// 获取文件名
String fileName = file.getOriginalFilename();
// System.out.print("上传的文件名为: "+fileName+"\n");
fileName = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + "_" + fileName;
System.out.print("(加个时间戳,尽量避免文件名称重复)保存的文件名为: "+fileName+"\n");
//加个时间戳,尽量避免文件名称重复
String path = "E:/fileUpload/" +fileName;
//String path = "E:/fileUpload/" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + "_" + fileName;
//文件绝对路径
System.out.print("保存文件绝对路径"+path+"\n");
//创建文件路径
File dest = new File(path);
//判断文件是否已经存在
if (dest.exists()) {
return "文件已经存在";
}
//判断文件父目录是否存在
if (!dest.getParentFile().exists()) {
dest.getParentFile().mkdir();
}
try {
//上传文件
file.transferTo(dest); //保存文件
System.out.print("保存文件路径"+path+"\n");
//url="http://你自己的域名/项目名/images/"+fileName;//正式项目
url="http://localhost:8080/images/"+fileName;//本地运行项目
int jieguo= shiPinService.insertUrl(fileName,path,url);
System.out.print("插入结果"+jieguo+"\n");
System.out.print("保存的完整url===="+url+"\n");
} catch (IOException e) {
return "上传失败";
}
return "上传成功,文件url=="+url;
}
//查询
@RequestMapping("/chaxun")
public String huizhiDuanxin(Model model){
System.out.print("查询视频"+"\n");
List<Shipin> shipins=shiPinService.selectShipin();
System.out.print("查询到的视频数量=="+shipins.size()+"\n");
model.addAttribute("Shipins", shipins);
return "/filelist";
}
}
9.页面:
file.html页面
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"xmlns:th="http://www.thymeleaf.org"
xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity3">
<head>
<title>Hello World!</title>
</head>
<body>
<div style="text-align: center;margin-top: 50px">
<form action="uploadFile" method="post" enctype="multipart/form-data">
<p><input type="file" name="fileName"/></p>
<p><input type="submit" value="上传视频"/></p>
</form>
<form action="chaxun" >
<p><input type="submit" value="查询视频"/></p>
</form>
</div>
</body>
</html>
filelist.html页面:
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
<head>
<meta charset="UTF-8">
<title>视频列表</title>
</head>
<body>
视频列表
<div>
<ul>
<li th:each="Shipin:${Shipins}">
<p>ID:<span th:text="${Shipin.id}"></span></p>
<p>视频url======<span th:text="${Shipin.url}"></span></p>
</li>
</ul>
</div>
</body>
</html>
最后运行项目,在浏览器输入:
http://localhost:8080/file进入上传页面
项目如果打包war发布到服务器的tomcat上,
如果WebAppConfig这个类引起错误,改成
public class WebAppConfig extends WebMvcConfigurationSupport 其余不变就可以了。
打包时:
把pom.xml文件中的这两个注释掉的放开,然后application类改成:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import org.springframework.web.WebApplicationInitializer;
@SpringBootApplication
public class ShangchuanApplication extends SpringBootServletInitializer implements WebApplicationInitializer {
// 打包war需要这个启动类,发布到服务器上
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application){
System.out.print("视频上传项目启动类2.==="+"\n");
return application.sources(ShangchuanApplication.class);
}
public static void main(String[] args) {
System.out.print("视频上传项目启动类1.==="+"\n");
SpringApplication.run(ShangchuanApplication.class, args);
}
}
最后点击:idea右侧的:
会打包成war,在项目的target目录下: