文件上传

逻辑

    @Value("${sava_path}")
private String sava_path; @Override
public String saveFile(MultipartFile multipartFile) {
//获取上传文件名
String oldName;
// 保存的文件名
String fileName = null;
//判断文件是否为空
if (!multipartFile.isEmpty()) {
oldName = multipartFile.getOriginalFilename();
fileName = getStringRandom(15) + "." + oldName.substring(oldName.indexOf(".") + 1);
//创建文件对象
File file = new File(sava_path + fileName);
//判断当前文件夹目录在计算机是否存在
if (!file.getParentFile().exists()) {
//创建文件目录
file.getParentFile().mkdirs();
try {
//保存文件
multipartFile.transferTo(file);
}catch (Exception e){
e.printStackTrace();
return "文件上传失败";
}
} else {
//判断文件是否存在
if (!file.exists()) {
try {
//保存文件
multipartFile.transferTo(file);
} catch (Exception e) {
e.printStackTrace();
}
}else{
//重新命名
fileName = getStringRandom(15) + "." + oldName.substring(oldName.indexOf(".") + 1);
file = new File(sava_path + fileName);
try {
//保存文件
multipartFile.transferTo(file);
} catch (Exception e) {
e.printStackTrace();
}
}
} } else {
return "文件为空";
} return "上传成功";
}

配置

// application.yml 格式
sava_path: D:\testFile\ //application.properties 格式
sava_path=D:\testFile\

按照自己的习惯选其中之一添加在你的配置文件  (sava_path  存放文件的目录)

生成文件名

/**
* 时间戳加上传文件的后缀
* System.currentTimeMillis() 时间戳
* oldName.substring(oldName.indexOf(".")+1) 上传文件名中第一次出现.后的所有字符 +1 是为了排除.
*/
String fileName = System.currentTimeMillis()+"."+oldName.substring(oldName.indexOf(".")+1);
   /**
* 生成字母加数字的随机数
* @param length 长度
* @return
*/
public static String getStringRandom(int length) {
String val = "";
Random random = new Random();
//参数length,表示生成几位随机数
for (int i = 0; i < length; i++) {
String charOrNum = random.nextInt(2) % 2 == 0 ? "char" : "num";
//输出字母还是数字
if ("char".equalsIgnoreCase(charOrNum)) {
//输出是大写字母还是小写字母
int temp = random.nextInt(2) % 2 == 0 ? 65 : 97;
val += (char) (random.nextInt(26) + temp);
} else if ("num".equalsIgnoreCase(charOrNum)) {
val += String.valueOf(random.nextInt(10));
}
}
return val;
} /**
* getStringRandom(15) 调用上面的方法 给出你所需文件名的长度
* 其他的和时间戳的一致
*/
fileName = getStringRandom(15) + "." + oldName.substring(oldName.indexOf(".") + 1);

选择其中的一种 个人喜欢第二个

java 文件上传的那些事的更多相关文章

  1. 小兔Java教程 - 三分钟学会Java文件上传

    今天群里正好有人问起了Java文件上传的事情,本来这是Java里面的知识点,而我目前最主要的精力还是放在了JS的部分.不过反正也不麻烦,我就专门开一贴来聊聊Java文件上传的基本实现方法吧. 话不多说 ...

  2. 2013第38周日Java文件上传下载收集思考

    2013第38周日Java文件上传&下载收集思考 感觉文件上传及下载操作很常用,之前简单搜集过一些东西,没有及时学习总结,现在基本没啥印象了,今天就再次学习下,记录下自己目前知识背景下对该类问 ...

  3. java文件上传-原始的Servlet方式

    前言: 干了这几个项目,也做过几次文件上传下载,要么是copy项目以前的代码,要么是百度的,虽然做出来了,但学习一下原理弄透彻还是很有必要的.刚出去转了一圈看周围有没有租房的,在北京出去找房子是心里感 ...

  4. JAVA文件上传 ServletFileUpLoad 实例

    1.  jsp <%@ page language="java" contentType="text/html" pageEncoding="u ...

  5. java文件上传工具包

    java 文件上传工具包 主要有两个方法:单文件上传和多文件上传 @Slf4j public class UploadFileUtil { //上传单张图片 public String uploadP ...

  6. java 文件上传

    java 上传文件  如果不依赖框架的话  要利用 Apache 中几个jar文件来处理   1.  给表单设置enctype属性,其值为 "multipart/form-data" ...

  7. java文件上传和下载

    简介 文件上传和下载是java web中常见的操作,文件上传主要是将文件通过IO流传放到服务器的某一个特定的文件夹下,而文件下载则是与文件上传相反,将文件从服务器的特定的文件夹下的文件通过IO流下载到 ...

  8. java文件上传下载

    文件上传首先要引入两个核心包 commons-fileupload-1.2.1.jar commons-io-1.4.jar 下面是对文件上传和下载的一些代码做的一个简单封装,可以方便以后直接使用[使 ...

  9. java文件上传路径缺少\的解决办法

    今天做一个文件上传,取路径,然后读取文件的时候,发现存储到MySQL的路径是这样的:

随机推荐

  1. vue 修改数据

    通过数组中的方法改变数据 变异方法(改变原数组) push() pop() shift() unshift() splice() sort() reverse() 替换数组(生成新数组) filter ...

  2. 开源OLAP引擎对比

    什么是olap 01.绝大多数请求都是读请求 02.数据以相当大的批次(>1000行)更新,而不是单行更新;或者它根本没有更新 03.数据已添加到数据库,但不会进行修改 04.对于读取,每次查询 ...

  3. 工具-效率工具-XMIND8破解(99.1.3)

    @ 目录 1.下载 2.修改hosts文件 3.修改配置文件 4.填入序列号 5.破解完成 关于作者 1.下载 1.点击进入官方网站下载 2.下载破解包 网址:点击进入网盘地址 密码:domd 2.修 ...

  4. Spring0-前言序

    Spring的简介 一般情况下我们说的Spring是指SpringFramework,而SpringFramework实际上只是Spring家族中的一个分支而已,这在下一章会介绍 Spring实际上也 ...

  5. Raft算法系列教程3:日志复制

    1.日志复制的过程 Leader选出后,就开始接收客户端的请求.Leader把请求作为日志条目(Log entries)加入到它的日志中,然后并行的向其他服务器发起 AppendEntries RPC ...

  6. [论文分享]Channel Pruning via Automatic Structure Search

    authors: Mingbao Lin, Rongrong Ji, etc. comments: IJCAL2020 cite: [2001.08565v3] Channel Pruning via ...

  7. PP主数据-物料主数据

    一.PP物料主数据:PP的物料主数据,是对应到系统的组织架构的,不同的组织层次,都有各自的主数据需要创建. (1),一般数据:一般数据是在集团层面的主数据,主要包括:物料编码.物料描述.辅助计量单位以 ...

  8. java零基础之--JDK安装篇

    ---恢复内容开始--- 很多零基础学习者在开始学习java中很难理解JDK的安装和配置,以下是基于Windows 7 的安装配置流程(Windows 10类似) 1. 在安装之前我们先了解几个名词: ...

  9. Centos7无网络下安装mysql5.7——mysql-rpm安装

    本教程指将mysql安装到系统默认目录下,如想自定义修改目录,请在rpm安装时自行修改: rpm -ivh --prefix= /opt xxx.rpm #将xxx.rpm安装到/opt下 一.下载m ...

  10. JS中的多层次排序算法

    引子 排序在编程中随处可见,从开始学习变成,到项目开发,基本上或多或少会遇到一些排序问题,接下来我要写的是我在实际开发终于到的一个排序问题,一开始卡了我很久,后面随着知识积累,实践变多才解决掉了,不知 ...