一.   文件上传

这里我们使用request.getSession().getServletContext().getRealPath("/static")的方式来设置文件的存储路径,并存入数据库中

request.getSession().getServletContext() 获取的是Servlet容器对象,相当于tomcat容器了。getRealPath("/") 获取实际路径,“/”指代项目根目录,所以代码返回的是项目在容器中的实际发布运行的根路径

这里我的文件就保存在了tomcat容器:C:\Users\Administrator\AppData\Local\Temp\tomcat-docbase.4580300150688111201.8080\static下

当我们部署到linux的时候,文件就保存在了/tmp/tomcat-docbase.6117940652560190565.8088/static/下

Controller:

/**
* 多文件上传接口
* */
@ResponseBody
@RequestMapping(value = "/fileUpload", produces = "application/json;charset=UTF-8")
public JSONObject fileUpload(@RequestParam("file") MultipartFile[] files, HttpServletRequest request) throws Exception{
String serverName = "文件上传";
VirgoLog.updateStep(CONTROLLER_NAME_DES,serverName);
List<FileManage> fileManages = fileService.fileUpload(files,request);
Map<String,Object> resMap = new HashMap<String,Object>();
//0:操作成功
resMap.put("code", ErrorCode.ERR_SUCCEED.getErrorCode());
resMap.put("desc",ErrorCode.ERR_SUCCEED.getErrorMessage());
resMap.put("fileInfo",fileManages);
return JSON.parseObject(JSONConvertor.toJSON(resMap));
}

service  文件上传业务类

/**
* 文件上传service
* @param files
* @throws Exception
*/
@Override
public void fileUpload(@RequestParam("file")MultipartFile[] files, HttpServletRequest request) throws Exception {
//文件命名
//保存时的文件名
for(int i=0;i<files.length;i++) {
//保存文件到本地文件,并保存路径到数据库
DateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");
Calendar calendar = Calendar.getInstance();
String fileName = df.format(calendar.getTime()) + files[i].getOriginalFilename();
log.log("文件的文件名为:" + fileName);
//保存文件的绝对路径
String filePath = request.getSession().getServletContext().getRealPath("static/");
log.log("文件的绝对路径:" + filePath);
FileManage fileManage = new FileManage();
try {
//上传文件
FileUtil.uploadFile(files[i].getBytes(), filePath, fileName);
//保存到数据库代码,存入路径以及文件名称
} catch (IllegalStateException | IOException e) {
e.printStackTrace();
throw new ZDYException(ErrorCode.ERR_FILE_UPLOAD_FAIL);
}
}
}

  

文件上传工具类

/**
* Created by hengyang4 on 2018/11/2.
*/
public class FileUtil { //文件上传工具类服务方法
public static void uploadFile(byte[] file, String filePath, String fileName) throws Exception{ File targetFile = new File(filePath);
if(!targetFile.exists()){
targetFile.mkdirs();
}
FileOutputStream out = new FileOutputStream(filePath+fileName);
out.write(file);
out.flush();
out.close();
} }

二.    文件下载

/**
* 文件下载service
* @param fileId
* @throws Exception
*/
@Override
public String downloadFile(String fileId, HttpServletResponse response) throws Exception {
//这里要根据文件id在数据库中查询之前保存的文件信息 FileManage fileManage = fileManageMapper.selectByPrimaryKey(fileId);
//文件名
String fileName = fileManage.getFileName();
//文件的相对路径
String path = fileManage.getFilePath();
InputStream inputStream = new FileInputStream(new File(path + fileName));
//如果文件不存在
if(inputStream == null){
throw new ZDYException(ErrorCode.ERR_NOT_FILE);
}
response.setHeader("content-type", "application/octet-stream");
response.setContentType("application/octet-stream");
try {
String name = java.net.URLEncoder.encode(fileName, "UTF-8");
response.setHeader("Content-Disposition", "attachment;filename=" + name );
} catch (UnsupportedEncodingException e2) {
e2.printStackTrace();
}
byte[] buff = new byte[1024];
BufferedInputStream bis = null;
OutputStream os = null;
try {
os = response.getOutputStream();
bis = new BufferedInputStream(inputStream);
int i = bis.read(buff);
while (i != -1) {
os.write(buff, 0, buff.length);
os.flush();
i = bis.read(buff);
}
} catch (FileNotFoundException e1) {
//e1.getMessage()+"系统找不到指定的文件";
throw new ZDYException(ErrorCode.ERR_NOT_FILE);
}catch (IOException e) {
e.printStackTrace();
} finally {
if (bis != null) {
try {
bis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return "success"; }

  这就是springboot中文件的上传和下载,很简单很快捷

Springboot(九).多文件上传下载文件(并将url存入数据库表中)的更多相关文章

  1. springboot整合vue实现上传下载文件

    https://blog.csdn.net/yhhyhhyhhyhh/article/details/89888953 文章目录 springboot整合vue实现上传下载文件 1上传下载文件api文 ...

  2. 每天一个linux命令(文件上传下载文件操作):【转载】gzip命令

    减少文件大小有两个明显的好处,一是可以减少存储空间,二是通过网络传输文件时,可以减少传输的时间.gzip是在Linux系统中经常使用的一个对文件进行压缩和解压缩的命令,既方便又好用.gzip不仅可以用 ...

  3. SpringBoot入门一:基础知识(环境搭建、注解说明、创建对象方法、注入方式、集成jsp/Thymeleaf、logback日志、全局热部署、文件上传/下载、拦截器、自动配置原理等)

    SpringBoot设计目的是用来简化Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置.通过这种方式,SpringBoot致力于在蓬勃发 ...

  4. Spring Boot2(十四):单文件上传/下载,文件批量上传

    文件上传和下载在项目中经常用到,这里主要学习SpringBoot完成单个文件上传/下载,批量文件上传的场景应用.结合mysql数据库.jpa数据层操作.thymeleaf页面模板. 一.准备 添加ma ...

  5. 使用Typescript重构axios(二十五)——文件上传下载进度监控

    0. 系列文章 1.使用Typescript重构axios(一)--写在最前面 2.使用Typescript重构axios(二)--项目起手,跑通流程 3.使用Typescript重构axios(三) ...

  6. SpringMVC文件上传下载(单文件、多文件)

    前言 大家好,我是bigsai,今天我们学习Springmvc的文件上传下载. 文件上传和下载是互联网web应用非常重要的组成部分,它是信息交互传输的重要渠道之一.你可能经常在网页上传下载文件,你可能 ...

  7. 一、手把手教你docker搭建fastDFS文件上传下载服务器

    在搭建fastDFS文件上传下载服务器之前,你需要准备的有一个可连接的linux服务器,并且该linux服务器上已经安装了docker,若还有没安装docker的,先百度自行安装docker. 1.执 ...

  8. SpringMVC入门一:基础知识(依赖、注解、文件上传/下载、拦截器、异常处理等)

    为了使Spring可插入MVC架构,SpringFrameWork在Spring基础上开发SpringMVC框架,从而使用Spring进行WEB开发时可以选择使用Spring的SpringMVC框架作 ...

  9. Struts的文件上传下载

    Struts的文件上传下载 1.文件上传 Struts2的文件上传也是使用fileUpload的组件,这个组默认是集合在框架里面的.且是使用拦截器:<interceptor name=" ...

随机推荐

  1. # 模乘(解决乘法取模爆long long)

    模乘(解决乘法取模爆long long) 二进制思想,变乘法为多次加法,具体思想跟着代码手算一遍就理解了,挺简单的 ll qmul(ll a,ll b,ll m) { ll ans=0; while( ...

  2. python-day43(正式学习)

    目录 复习 今日内容 字段操作 多表关系 外键 一对一:无级联关系 一对一:有级联关系 一对多 多对多 复习 """ 1.数据库的配置:my.ini [mysqld][m ...

  3. python中进程的几种创建方式

    在新创建的子进程中,会把父进程的所有信息复制一份,它们之间的数据互不影响. 使用os.fork()创建 该方式只能用于Unix/Linux操作系统中,在windows不能用. import os # ...

  4. WPF中Brush类型

    画刷Brush使用 画刷类 SolidColorBrush LinearGradientBrush RadialGradientBrush ImageBrush VisualBrush Drawing ...

  5. @RequestMapping-占位符映射

    占位符映射

  6. springboot(十八)-session共享

    前言 在传统的单服务架构中,一般来说,只有一个服务器,那么不存在 Session 共享问题,但是在分布式/集群项目中,Session 共享则是一个必须面对的问题,先看一个简单的架构图: 在这样的架构中 ...

  7. Action注入错误

    2016-07-13 13:52:09,584 [ERROR]-[com.opensymphony.xwork2.util.logging.commons.CommonsLogger:38] Exce ...

  8. 【项目构建工具】 Gradle笔记2

    一.Gradle执行流程 1.Gradle的执行流程(生命周期)主要是三个阶段: 初始化阶段:解析整个工程中所有Project,构建所有的Project对应的project对象 配置阶段:解析所有的p ...

  9. SecureCRT 连接 Centos7.0 (NAT模式),且能连接公网。

    1.打开物理主机运行-输入cmd,输入ipconfig,获取物理主机ip地址. ip:192.168.11.138 2.点击网络适配器,选择NAT模式. 3.点击Centos界面左上角-编辑-虚拟网络 ...

  10. poj3522 苗条树(极差最小生成树)

    给你N个点和M条边 要求你求出一个生成树使得这个生成树里边权极差最小 做法① n*m做法 当最小的边已知的时候这个生成树就确定 所以最大的边也确定了 于是我们每次枚举最小的边 然后用kruskal做一 ...