java 文件上传的那些事
文件上传
逻辑
@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 文件上传的那些事的更多相关文章
- 小兔Java教程 - 三分钟学会Java文件上传
今天群里正好有人问起了Java文件上传的事情,本来这是Java里面的知识点,而我目前最主要的精力还是放在了JS的部分.不过反正也不麻烦,我就专门开一贴来聊聊Java文件上传的基本实现方法吧. 话不多说 ...
- 2013第38周日Java文件上传下载收集思考
2013第38周日Java文件上传&下载收集思考 感觉文件上传及下载操作很常用,之前简单搜集过一些东西,没有及时学习总结,现在基本没啥印象了,今天就再次学习下,记录下自己目前知识背景下对该类问 ...
- java文件上传-原始的Servlet方式
前言: 干了这几个项目,也做过几次文件上传下载,要么是copy项目以前的代码,要么是百度的,虽然做出来了,但学习一下原理弄透彻还是很有必要的.刚出去转了一圈看周围有没有租房的,在北京出去找房子是心里感 ...
- JAVA文件上传 ServletFileUpLoad 实例
1. jsp <%@ page language="java" contentType="text/html" pageEncoding="u ...
- java文件上传工具包
java 文件上传工具包 主要有两个方法:单文件上传和多文件上传 @Slf4j public class UploadFileUtil { //上传单张图片 public String uploadP ...
- java 文件上传
java 上传文件 如果不依赖框架的话 要利用 Apache 中几个jar文件来处理 1. 给表单设置enctype属性,其值为 "multipart/form-data" ...
- java文件上传和下载
简介 文件上传和下载是java web中常见的操作,文件上传主要是将文件通过IO流传放到服务器的某一个特定的文件夹下,而文件下载则是与文件上传相反,将文件从服务器的特定的文件夹下的文件通过IO流下载到 ...
- java文件上传下载
文件上传首先要引入两个核心包 commons-fileupload-1.2.1.jar commons-io-1.4.jar 下面是对文件上传和下载的一些代码做的一个简单封装,可以方便以后直接使用[使 ...
- java文件上传路径缺少\的解决办法
今天做一个文件上传,取路径,然后读取文件的时候,发现存储到MySQL的路径是这样的:
随机推荐
- vue第七单元(vue的单文件组件形式-单文件组件的加载原理-vue-cli构建的开发环境以及生命周期)
第七单元(vue的单文件组件形式-单文件组件的加载原理-vue-cli构建的开发环境以及生命周期) #课程目标 掌握安装 vue-cli 命令行工具的方法,掌握使用命令行在本地搭建开发环境,使用命令行 ...
- P4735 最大异或和 01 Trie
题目描述 给定一个非负整数序列 \(\{a\}\),初始长度为\(n\). 有 \(m\) 个操作,有以下两种操作类型: \(A\ x\):添加操作,表示在序列末尾添加一个数 \(x\),序列的长度 ...
- 最速下降法--MATLAB程序
function x = fxsteep(f,e,a,b)x1 = a;x2 = b;Q = fxhesson(f,x1,x2);x0 = [x1,x2]';temp = [x0];fx1 = dif ...
- iOS UIcollectionView 实现卡牌翻转效果
- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typica ...
- Core3.0全局捕获异常
前言 此方法由百度所得,找不到原文链接了 步骤 1.创建异常捕获类 using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; u ...
- Java源码研究001:关于List的并发修改异常
这个就是实现一个简单的 ArrayList 的遍历,如果存在一个为"aaa"的值,就添加一个"ccc" package Array; import java.u ...
- Spring Boot使用Maven自定义打包方式
前言:本文将告诉你如何将程序Jar与与依赖Jar及配置文件分离打包,以下列举了两种不同Maven打包方式,其打包效果一致! 一.第一种Maven打包方式,将jar及resources下全部配置文件,拷 ...
- 使用swagger上传文件
经常使用swagger,可以通过设置[ProducesResponseType]标记接口的返回信息:swagger也能通过接口的参数列表,自动获得发送的数据结构信息. 不过有一个例外,就是上传文件的时 ...
- PostgreSQL使用MySQL外表(mysql_fdw)
postgres使用mysql外表 转载请注明出处https://www.cnblogs.com/funnyzpc/p/14223167.html 浅谈 postgres不知不觉已经升到了版本13,记 ...
- 改进你的c#代码的5个技巧(二)
在本文中,我将向你展示c#编程的5个最佳实践.我从日常编程经验中学到了这些实践.我在release模式下测试了所有的代码,并在开发环境稳定后进行了截屏.我想你会喜欢这些建议的. 在使用数据类型之前选择 ...