SSM-文件上传
因为开发环境和线上环境系统不一样,所以需要区别环境
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-文件上传的更多相关文章
- SSM文件上传
**自己对于SSM文件上传的一些心得** 刚开始的时候也是在网上寻找一些简单的案例,可能我的这篇文章不是最好的,但是这些都是我自己慢慢的摸索以及自己的尝试的一些心得,希望对各位有所帮助. 其实文件的上 ...
- ssm文件上传下载比较详细的案例
背景:ssm框架 接下来,我会介绍单文件上传,下载,多文件的上传,下载,使用ajax进行文件的上传下载,和普通的表单提交的文件上传下载. 只要做项目,总是少不了文件的操作,好了废话不多说,直接上代码! ...
- SSM文件上传要点总结
文件的上传要点: 1.表单方面:enctype="multitype/form-data" 编码方式选择混编码 input 类型采用file 2.实体类一定要进行序列化,也就是im ...
- maven工程 java 实现文件上传 SSM ajax异步请求上传
java ssm框架实现文件上传 实现:单文件上传.多文件上传(单选和多选),并且用 ajax 异步刷新,在当前界面显示上传的文件 首先springmvc的配置文件要配置上传文件解析器: <!- ...
- 回忆曾经的SSM框架实现文件上传
近期在使用springboot实现文件上传的功能,想到曾经用SSM做过这个功能,在这里记录一下过去实现的方式 maven添加文件上传所需的依赖 springMVC的配置文件配置一下文件上传 我实现的是 ...
- SSM + Android 网络文件上传下载
SSM + Android 网络交互的那些事 2016年12月14日 17:58:36 ssm做为后台与android交互,相信只要是了解过的人都知道一些基本的数据交互,向json,对象,map的交互 ...
- springmvc文件上传下载简单实现案例(ssm框架使用)
springmvc文件上传下载实现起来非常简单,此springmvc上传下载案例适合已经搭建好的ssm框架(spring+springmvc+mybatis)使用,ssm框架项目的搭建我相信你们已经搭 ...
- 【转】jsp+servlet和SSM分别是如何实现文件上传(示例)
原文地址:https://blog.csdn.net/niceliusir/article/details/78453560 以下是jsp+servlet和SSM分别是如何实现文件上传的方法示例 两种 ...
- SSH,SSM框架文件上传
一.了解文件上传 1.1 什么是文件上传 将本地文件通过流的形式写到服务器上 1.2 文件上传的技术 JspSmartUpload: 其组件是应用jsp进行B/S程序开发过 ...
- ssm框架下实现文件上传
1.由于ssm框架是使用Maven进行管理的,文件上传所需要的jar包利用pom.xml进行添加,如下所示: <properties> <commons-fileupload.v ...
随机推荐
- Java Web 笔记(杂)
Java Web 概述 什么是Java Web 在Sun的Java Servlet 规范中,对Java Web 应用做了这样的定义: "Java Web" 应用由一组Servlet ...
- mac下Red Hat 7.4服务器初始化
物料:VMware Fusion for Mac版 rhel-server-7.4-x86_64-dvd.iso 通过VMware安装好虚拟机,打开终端: 1.通过ifconfig查看ip和网 ...
- 吴裕雄--天生自然SSH框架开发:搭建一个完整的SSH框架
下载jar包 spring框架的jar包:https://repo.spring.io/ hibernate框架的jar包:http://hibernate.org/orm/ struts2框架的ja ...
- 吴裕雄 python 神经网络——TensorFlow训练神经网络:MNIST最佳实践
import os import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data INPUT_N ...
- ➡️➡️➡️IELTS Listening
目录 src numbers and letters src https://ielts-simon.com/ielts-help-and-english-pr/ielts-listening/ nu ...
- 前缀和-Big Water Problem (牛客)
链接:https://ac.nowcoder.com/acm/problem/15164 题目描述 给一个数列,会有多次询问,对于每一次询问,会有两种操作: 1:给定两个整数x, y, 然后在原数组的 ...
- POJ 3258 River Hopscotch(二分答案)
嗯... 题目链接:http://poj.org/problem?id=3258 一道很典型的二分答案的题目,和跳石头太像了!! 这道题的题目很显然,求最小中的最大值,注意这道题石头的位置不是从小到大 ...
- SpringSecurity配置,简单梳理
生活加油:摘一句子: “我希望自己能写这样的诗.我希望自己也是一颗星星.如果我会发光,就不必害怕黑暗.如果我自己是那么美好,那么一切恐惧就可以烟消云散.于是我开始存下了一点希望—如果我能做到,那么我就 ...
- 某元素 fixed 后,从页面消失
position: fixed; top: 0; left: 0; width: 100%; z-index: 1; 一开始是定位后,元素就从页面消失了,添加了 层级 之后就可以了.
- Python中神秘的-5到256
注:本文不区分作为编程语言的Python和作为语言实现的Python.后者均默认为CPython. 了解他人对Python源代码的掌握情况,我喜欢问这样一个问题 请问,在Python中,256和257 ...