因为开发环境和线上环境系统不一样,所以需要区别环境

config.java

可以判断系统进行自动化的区别,我是手动去切换注释的

public class config {
//public static final String filePath = "E:\\nginx-1.16.1\\html\\uploadFile";//本地
public static final String filePath = "/usr/local/nginx/html/uploadFile/"; //线上
//public static final String fileUrl = "http://localhost/uploadFile/"; //本地
public static final String fileUrl = "http://xx.xx.xx.xx/uploadFile/"; //线上
}

工具

// util/uuid.java

public class uuid {
public static String getUuid(){
String uuid = UUID.randomUUID().toString();
//去掉“-”符号
return uuid.replaceAll("-", "");
}
}

上传文件

// util/UploadFile.java

@Controller
public class UploadFile { @RequestMapping("/uploadFile")
@ResponseBody
public Map upload(@RequestParam("file") MultipartFile file, HttpServletRequest req) throws Exception, IOException {
return saveFile(file, req);
} private Map saveFile(MultipartFile file, HttpServletRequest req) {
Map map = new HashMap();
// 判断文件是否为空
if (!file.isEmpty()) {
try {
String fileId = uuid.getUuid();
String fileName = file.getOriginalFilename();//1.jpg 获取上传文件的全名加后缀
map.put("fileId",fileId);
map.put("fileName",fileName); //这是指定的绝对路径
String filePath = config.filePath;
String fileUrl = config.fileUrl;
File realPathFolder = new File(filePath); if (!realPathFolder.exists()) {
realPathFolder.mkdir();
}
String newName = fileId + "_" + fileName;//创建一个新的文件名称 FilenameUtils.getExtension(name):获取文件后缀名
File f = new File(realPathFolder,newName); map.put("newName", newName);
map.put("fileUrl",fileUrl);
map.put("url",fileUrl+newName);
map.put("code", 20000); //成功的固定字段
map.put("msg", "上传file成功");
file.transferTo(f);//将上传的文件存储到指定位置
} catch (Exception e) {
map.put("code", 0);
map.put("msg", "上传file失败");
e.printStackTrace();
}
} else {
map.put("msg", "上传file失败");
}
return map;
}
}

上传base64

// util/UpLoadBase64.java

@Controller
public class UpLoadBase64 { @RequestMapping(value = "/uploadBase64", method = RequestMethod.POST)
@ResponseBody
public Map base64UpLoad(@RequestParam String file,@RequestParam String fileName,HttpServletRequest req, HttpServletResponse res) { Map map = new HashMap();
try {
String dataPrix = "";
String data = "";
if (file == null || "".equals(file)) {
throw new Exception("上传数据为空");
} else {
String[] d = file.split("base64,"); //把base, 切换
if (d != null && d.length == 2) {
dataPrix = d[0];
data = d[1];
} else {
throw new Exception("上传失败,数据不合法");
}
} String fileId = uuid.getUuid();
map.put("fileId", fileId);
map.put("fileName", fileName); //这是指定的绝对路径
String filePath = config.filePath;
String fileUrl = config.fileUrl;
//因为BASE64Decoder的jar问题,此处使用spring框架提供的工具包
byte[] bs = Base64Utils.decodeFromString(data);
File realPathFolder = new File(filePath);
if (!realPathFolder.exists()) {
realPathFolder.mkdir();
}
String newName = fileId + '_' + fileName;//创建一个新的文件名称.后缀名
FileUtils.writeByteArrayToFile(new File(realPathFolder,newName), bs);
map.put("newName", newName);
map.put("fileUrl",fileUrl);
map.put("url",fileUrl+newName);
map.put("code", 20000); //成功的固定字段
map.put("msg", "上传base64成功");
} catch (Exception e) {
map.put("msg", "上传base64失败");
e.printStackTrace();
}
return map;
}
}

删除文件

// util/DeleteFile.java

@Controller
public class DeleteFile { @RequestMapping("/deleteFile")
@ResponseBody //不写会默认返回当前路径!!
public Map deleteFile(@RequestParam("fileName") String fileName) throws Exception, IOException {
Map map = new HashMap();
File file = new File(filePath,fileName);
if(file.exists()){
file.delete();
map.put("code",20000);
map.put("msg","文件删除成功");
}else{
map.put("msg","文件不存在");
}
return map;
}
}

文件下载

// util/DownLoad.java

@Controller
public class DownLoad {
/*
* 下载方式一:
* ①获取前台要下载的文件名称
* ②设置响应类型
* ③设置下载页显示的文件名
* ④获取下载文件夹的绝对路径和文件名合并为File类型
* ⑤将文件复制到浏览器
*/
@RequestMapping("/download")
@ResponseBody
public void download(HttpServletRequest req, HttpServletResponse resp, String fileName) throws Exception {
String filePath = config.filePath;
//String realPath = req.getServletContext().getRealPath("/download");//获取下载文件的路径
File file = new File(filePath,fileName);//把下载文件构成一个文件处理 filename:前台传过来的文件名称 //设置响应类型 ==》 告诉浏览器当前是下载操作,我要下载东西
resp.setContentType("application/x-msdownload");
//设置下载时文件的显示类型(即文件名称-后缀) ex:txt为文本类型
resp.setHeader("Content-Disposition", "attachment;filename=" + fileName); //下载文件:将一个路径下的文件数据转到一个输出流中,也就是把服务器文件通过流写(复制)到浏览器端
Files.copy(file.toPath(), resp.getOutputStream());//Files.copy(要下载的文件的路径,响应的输出流)
}
}

这些代码随便百度就有,还有上传多个文件的,自行百度

SSM-文件上传的更多相关文章

  1. SSM文件上传

    **自己对于SSM文件上传的一些心得** 刚开始的时候也是在网上寻找一些简单的案例,可能我的这篇文章不是最好的,但是这些都是我自己慢慢的摸索以及自己的尝试的一些心得,希望对各位有所帮助. 其实文件的上 ...

  2. ssm文件上传下载比较详细的案例

    背景:ssm框架 接下来,我会介绍单文件上传,下载,多文件的上传,下载,使用ajax进行文件的上传下载,和普通的表单提交的文件上传下载. 只要做项目,总是少不了文件的操作,好了废话不多说,直接上代码! ...

  3. SSM文件上传要点总结

    文件的上传要点: 1.表单方面:enctype="multitype/form-data" 编码方式选择混编码 input 类型采用file 2.实体类一定要进行序列化,也就是im ...

  4. maven工程 java 实现文件上传 SSM ajax异步请求上传

    java ssm框架实现文件上传 实现:单文件上传.多文件上传(单选和多选),并且用 ajax 异步刷新,在当前界面显示上传的文件 首先springmvc的配置文件要配置上传文件解析器: <!- ...

  5. 回忆曾经的SSM框架实现文件上传

    近期在使用springboot实现文件上传的功能,想到曾经用SSM做过这个功能,在这里记录一下过去实现的方式 maven添加文件上传所需的依赖 springMVC的配置文件配置一下文件上传 我实现的是 ...

  6. SSM + Android 网络文件上传下载

    SSM + Android 网络交互的那些事 2016年12月14日 17:58:36 ssm做为后台与android交互,相信只要是了解过的人都知道一些基本的数据交互,向json,对象,map的交互 ...

  7. springmvc文件上传下载简单实现案例(ssm框架使用)

    springmvc文件上传下载实现起来非常简单,此springmvc上传下载案例适合已经搭建好的ssm框架(spring+springmvc+mybatis)使用,ssm框架项目的搭建我相信你们已经搭 ...

  8. 【转】jsp+servlet和SSM分别是如何实现文件上传(示例)

    原文地址:https://blog.csdn.net/niceliusir/article/details/78453560 以下是jsp+servlet和SSM分别是如何实现文件上传的方法示例 两种 ...

  9. SSH,SSM框架文件上传

    一.了解文件上传 1.1        什么是文件上传 将本地文件通过流的形式写到服务器上 1.2        文件上传的技术 JspSmartUpload: 其组件是应用jsp进行B/S程序开发过 ...

  10. ssm框架下实现文件上传

      1.由于ssm框架是使用Maven进行管理的,文件上传所需要的jar包利用pom.xml进行添加,如下所示: <properties> <commons-fileupload.v ...

随机推荐

  1. Manjaro 与 Windows 双系统时间相差8小时

    Manjaro 与 Windows 双系统时间相差8小时 产生原因: Windows 将本地硬件时间作为设定时区(如 UTC+8)的区时,而 Linux 默认将其作为 UTC 时间. 解决方式: 让 ...

  2. spring data flow

    spring data flow相当于一个快速发布应用的平台.并可以通过消息队列(kafa,rabbitMQ)把多个应用链接在一起进行链式处理数据.支持的平台是: Cloud Foundry Apac ...

  3. Spring Boot 使用 CXF 调用 WebService 服务

    上一张我们讲到 Spring Boot 开发 WebService 服务,本章研究基于 CXF 调用 WebService.另外本来想写一篇 xfire 作为 client 端来调用 webservi ...

  4. P1157 组合的输出

    P1157 组合的输出 #include <bits/stdc++.h> using namespace std; int n,r; int a[25]; vector<int> ...

  5. Euler Sums系列(三)

    \[\Large\sum_{n=1}^{\infty}\frac{\left(H_{n}^{(2)}\right)^{2}}{n^{2}}=\frac{19}{24}\zeta(6)+\zeta^{2 ...

  6. mDNS故障排查(译)

    WLC上mDNS网关的理解及排查 第一部分:介绍 这篇文档描述了Bonjour协议在WLC上的操作,该文档旨在协助工程师理解该工作流量的原理以及提供故障排查的指导. 第二部分:需求和前提 知识需求: ...

  7. ANSYS单元应用简介1

    目录 1. LINK单元 2. BEAM单元 3. PLANE单元 4. SHELL单元 5. SOLIDE单元 6. COMBIN单元 ANSYS中的单元针对不同的应用对象,有着不同的选择方法,下面 ...

  8. 360网安学习笔记——Web安全原理与实践

    网络安全 基本技能: 1.编程语言 2.计算机网络 3.操作系统 4.office 专业技能 1.web安全 2.网络安全 3.渗透测试 4.代码审计 能力提升 1.书籍 2.站点 3.安全平台 We ...

  9. mybatis源码探索笔记-3(使用代理mapper执行方法)

    前言 前面两章我们构建了SqlSessionFactory,并通过SqlSessionFactory创建了我们需要的SqlSession,并通过这个SqlSession获取了我们需要的代理mapper ...

  10. mcast_join_source_group函数

    #include <errno.h> #include <net/if.h> #include <sys/socket.h> #define SA struct s ...