文件上传

逻辑

    @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. Typora+图床详解(小白都能学得会)

    Typora+图床详解(小白都能学得会) 1 了解工作 博客中用的笔记软件--Typora(Markdown语法) 博客中用的图床--阿里云对象存储(Object Storage Service,简称 ...

  2. MySQL锁(四)行锁的加锁规则和案例

    在上一篇文章,我们学习了间隙锁和next-key lock,但是不知道怎么加锁,有哪些规则.间隙锁的概念不太好理解,尤其是配合上行锁后,很容易在判断是否会出现锁等待的问题上犯错. 今天我们就来学习一下 ...

  3. css 02-CSS属性:背景属性

    02-CSS属性:背景属性 #background 的常见背景属性 css2.1 中,常见的背景属性有以下几种:(经常用到,要记住) background-color:#ff99ff; 设置元素的背景 ...

  4. 个人微信公众号搭建Python实现 -个人公众号搭建-总结(14.3.6)

    @ 目录 1.主要技术:Flask,requests 2.实现的主要功能 3.目录说明 4.运行方式 关于作者 1.主要技术:Flask,requests requirements.txt如下 req ...

  5. kali2020创建root用户

    自kali更新到2020版后,默认取消了root用户的登录权限.只能用普通用户登录,这样做的优点在于对于kali的新手,在不懂的部分命令的情况下对系统的损害有所降低,也就说安全性提高了.但是普通用户权 ...

  6. 在库中使用schematics——ng add与ng update

    起步 创建一个angular库 ng new demo --create-application=false ng g library my-lib 可见如下目录结构 ├── node_modules ...

  7. (十一)、head--查看文件前若干部分,tail--查看文件后若干部分

    一.命令描述与格式 head用于查看文件前面部分,tail用于查看文件的末尾部分 格式:head/tail    [-选项]   文件 head选项: -c:处理文件若干字节数,加b.k.m -n:前 ...

  8. (七)、touch--创建文件或者更新时间戳

    一.命令说明与格式 创建文件并更新时间戳,若要创建的文件名已经存在,则仅仅更新时间戳,而不改变其他任何信息 格式:touch     [选项]   目录名/文件名 选项: -a            ...

  9. apk获取md5值的方法

    最简单的获取md5值和sha1值的方法,就是使用在线工具,在线上传.keystore或apk文件,就可以获取其sha1值 https://www.yunedit.com/sha1 安卓应用都使用一个签 ...

  10. 5.自定义view-评分控件RatingBar

    1.效果 2.实现原理 1.根据分数分别画选中的星星.正常的星星 2.onTouchEvent 中获取点击.滑动的位置,修改分数,在通过invalidate() 去重新绘制 核心代码: @Overri ...