Springboot(九).多文件上传下载文件(并将url存入数据库表中)
一. 文件上传
这里我们使用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存入数据库表中)的更多相关文章
- springboot整合vue实现上传下载文件
https://blog.csdn.net/yhhyhhyhhyhh/article/details/89888953 文章目录 springboot整合vue实现上传下载文件 1上传下载文件api文 ...
- 每天一个linux命令(文件上传下载文件操作):【转载】gzip命令
减少文件大小有两个明显的好处,一是可以减少存储空间,二是通过网络传输文件时,可以减少传输的时间.gzip是在Linux系统中经常使用的一个对文件进行压缩和解压缩的命令,既方便又好用.gzip不仅可以用 ...
- SpringBoot入门一:基础知识(环境搭建、注解说明、创建对象方法、注入方式、集成jsp/Thymeleaf、logback日志、全局热部署、文件上传/下载、拦截器、自动配置原理等)
SpringBoot设计目的是用来简化Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置.通过这种方式,SpringBoot致力于在蓬勃发 ...
- Spring Boot2(十四):单文件上传/下载,文件批量上传
文件上传和下载在项目中经常用到,这里主要学习SpringBoot完成单个文件上传/下载,批量文件上传的场景应用.结合mysql数据库.jpa数据层操作.thymeleaf页面模板. 一.准备 添加ma ...
- 使用Typescript重构axios(二十五)——文件上传下载进度监控
0. 系列文章 1.使用Typescript重构axios(一)--写在最前面 2.使用Typescript重构axios(二)--项目起手,跑通流程 3.使用Typescript重构axios(三) ...
- SpringMVC文件上传下载(单文件、多文件)
前言 大家好,我是bigsai,今天我们学习Springmvc的文件上传下载. 文件上传和下载是互联网web应用非常重要的组成部分,它是信息交互传输的重要渠道之一.你可能经常在网页上传下载文件,你可能 ...
- 一、手把手教你docker搭建fastDFS文件上传下载服务器
在搭建fastDFS文件上传下载服务器之前,你需要准备的有一个可连接的linux服务器,并且该linux服务器上已经安装了docker,若还有没安装docker的,先百度自行安装docker. 1.执 ...
- SpringMVC入门一:基础知识(依赖、注解、文件上传/下载、拦截器、异常处理等)
为了使Spring可插入MVC架构,SpringFrameWork在Spring基础上开发SpringMVC框架,从而使用Spring进行WEB开发时可以选择使用Spring的SpringMVC框架作 ...
- Struts的文件上传下载
Struts的文件上传下载 1.文件上传 Struts2的文件上传也是使用fileUpload的组件,这个组默认是集合在框架里面的.且是使用拦截器:<interceptor name=" ...
随机推荐
- HTML5网页文档结构
2.1 Web标准 Web标准,使得Web开发更加容易.Web标准由万维网联盟(W3C)制定. 2.1.1 Web标准概述 Web标准的最终目的就是保证每个人都有权力访问相同 ...
- python网络编程——使用UDP、TCP协议收发信息
UDP UDP是面向无连接的通讯协议,UDP数据包括目的端口号和源端口号信息,由于通讯不需要连接,所以可以实现广播发送. UDP传输数据时有大小限制,每个被传输的数据报必须限定在64KB之内. UDP ...
- rabbitmq中关于exchange模式type报错
channel.exchange_declare(exchange='logs', type='fanout') 报错: Traceback (most recent call last): Fil ...
- 用data的方法获取值的时候,要注意的问题一定要在先封装好
var art=$(".add-more").prev().find(".content").data("list1"); 我们一定要在aj ...
- Codeforces 1190C. Tokitsukaze and Duel
传送门 注意到后手可以模仿先手的操作,那么如果一回合之内没法决定胜负则一定 $\text{once again!}$ 考虑如何判断一回合内能否决定胜负 首先如果最左边和最右的 $0$ 或 $1$ 距离 ...
- java中this总结(转载请注明出处)
1:this在构造方法中:this可以进行构造方法中的相互调用,this(参数): 2:this调用方法中,代表调用该方法的对象的地址,例如下面的代码比较 package thisTest; publ ...
- Git 一般性操作
git全局设定 git config --global user.name “码云账号” git config --global user.email “码云注册邮箱” git 定位文件夹cd进入到需 ...
- Docker国内Yum源和国内镜像仓库
Docker国内Yum源和国内镜像仓库 2018年05月29日 :: nklinsirui 阅读数 6295更多 分类专栏: Docker 版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa ...
- CF1151F Sonya and Informatics
cf luogu 我们最终要的序列一定是前面全是0,后面全是1,假设总共\(m\)个0,那么这等价于前\(m\)位0的个数为\(m\).当然一开始可能数量没有\(m\) 那就把前\(m\)位0的数量作 ...
- 深入理解hive基础学习
Hive 是什么? 1.Hive 是基于 Hadoop处理结构化数据的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类 SQL 查询功能. 2.Hive 利用 HDFS 存储数据 ...