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

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. 笔记本分享热点wifi给手机上网

    2013年11月18日夜,刚在东莞安顿下来,明天开始上班. 闲来无事,因为无线路由器被牛哥“抢”走了,手机不能连接wifi了,考虑到每月的流量有限,于是考虑让笔记本分享热点给手机上网.因为之前也试过, ...

  2. 翻页插件 jquery

    //css <style> * { padding:; margin:; list-style: none; } .wrapper { width: 100%; cursor: point ...

  3. mysql_pw 指令 数据库创建过程

    ------------------pw_db数据库创建过程各表创建指令-------------------------- create database pw_db; #创建一个数据库use pw ...

  4. iOS ViewController 中代码书写规范

    示例: // // CommonViewController.m // ZTBCamera // // Created by ZachRobin on 2017/8/3. // Copyright © ...

  5. 1. Elasticsearch startup on local

    Download: https://www.elastic.co/downloads/elasticsearch 2. Setting: 1. [elasticsearch]\config\elast ...

  6. 同一条sql insert 有时快有时慢 引发的血案

    同一条sql语句,为什么有时插入块,有时插入慢原因剖析 背景:同一条sql ,有时插入时间几毫秒,有时插入时间几十毫秒,为什么? Sql角度:简单insert 表角度: 一个主键 系统参数角度: 开启 ...

  7. 「AHOI2014/JSOI2014」支线剧情

    「AHOI2014/JSOI2014」支线剧情 传送门 上下界网络流. 以 \(1\) 号节点为源点 \(s\) ,新建一个汇点 \(t\),如果 \(u\) 能到 \(v\),那么连边 \(u \t ...

  8. MySQL 之单表查询

    数据库数据: # (1) 创建数据表 create table employee( id int primary key auto_increment, emp_name char(12) not n ...

  9. C++的const成员函数

    我们知道,在C++中,若一个变量声明为const类型,则试图修改该变量的值的操作都被视编译错误.例如, const char blank = ‘’; blank = ‘\n’;  // 错误 面向对象 ...

  10. 机器学习之SVM多分类

    实验要求数据说明 :数据集data4train.mat是一个2*150的矩阵,代表了150个样本,每个样本具有两维特征,其类标在truelabel.mat文件中,trainning sample 图展 ...