Java工具类
- 以下将列出一些常用的Java工具类
1.时间日期相关
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* 处理日期相关的类
*/
public class DateUtil {
public static String FORMAT_ONE="yyyy-MM-dd hh:mm:ss";
public static String FORMAT_TWO="yyyy/MM/dd hh:mm:ss";
public static String FORMAT_THREE="yyyy年MM月dd日 hh时mm分ss秒";
public static String FORMAT_FOUR="yyyy年MM月dd日";
public static String FORMAT_FIVE="yyyy/MM/dd hh:mm";
public static String FORMAT_SIX="yyyy年MM月dd日 hh:mm";
/**
* 传入String类型的时间戳
* @param str
* @return
*/
public static String format(String str,String format){
if (!BeanUtils.isNotBlank(str)){
return getThisTime(format);
}
DateFormat df=new SimpleDateFormat(format);
long l = Long.parseLong(str);
return df.format(new Date(l));
}
public static String format(String str){
return format(str,FORMAT_TWO);
}
public static String getThisTime(String format){
Date date=new Date();
DateFormat df=new SimpleDateFormat(format);
return df.format(date);
}
public static String toDateString(String str,String format){
DateFormat df=new SimpleDateFormat(format);
try {
Date parse = df.parse(str);
return parse.getTime()+"";
} catch (ParseException e) {
e.printStackTrace();
}
return "";
}
}
2、文件处理相关类
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.jf.model.ShopFile;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.multipart.MultipartFile;
import java.io.*;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.util.HashMap;
import java.util.Map;
/**
* 文件处理的相关类
*/
public class FileUtils {
static ThreadLocal<Map<String,Object>> tl=new ThreadLocal<>();
/**
* 获取上传文件的md5
*
* @param file
* @return
*/
public static String getMd5(MultipartFile file) {
try {
byte[] uploadBytes = file.getBytes();
MessageDigest md5 = MessageDigest.getInstance("MD5");
byte[] digest = md5.digest(uploadBytes);
String hashString = new BigInteger(1, digest).toString(16);
return hashString;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 将JSON数据转成Map集合
* @param json
* @return
*/
public static Map<String,Object> JsonToMap(String json){
JSONObject jsonResult = JSONObject.parseObject(json);
Long AllSize = jsonResult.getLong("AllSize");
Long uploadSize = jsonResult.getLong("uploadSize");
Long thisSize = jsonResult.getLong("thisSize");
Boolean isStart = jsonResult.getBoolean("isStart");
Boolean isReady = jsonResult.getBoolean("isReady");
Map<String, Object> map=new HashMap<>();
map.put("AllSize",AllSize);
map.put("uploadSize",uploadSize);
map.put("isStart",isStart);
map.put("thisSize",thisSize);
map.put("isReady",isReady);
return map;
}
/**
* 将Map集合转成JSON数据
* @param map
* @return
*/
public static String MapToJson(Map<String, Object> map){
String json= JSONArray.toJSONString(map);
return json;
}
public static Map<String,Object> getMap(){
if(tl.get() == null){
return new HashMap<String,Object>();
}else{
return tl.get();
}
}
public static void setMap(Map<String,Object> map){
tl.set(map);
}
public static void removeMap(){
if(tl.get() != null){
tl.remove();
}
}
/**
* 断点续传和文件进度条上传
* @param file
* @param redisTemplate
* @param shopFile
*/
public static void upload(MultipartFile file, RedisTemplate redisTemplate, ShopFile shopFile, String uid, String filename) {
try {
String path ="E:/file/";
//未上传 正常上传
BufferedInputStream bis = new BufferedInputStream(file.getInputStream());
BufferedOutputStream bos = null;
long bytesWritten = 0;
if (shopFile == null){
//是没有上传过的文件
bos = new BufferedOutputStream(new FileOutputStream(path+filename));
}else{
//已经在数据库里存在的文件
bos = new BufferedOutputStream(new FileOutputStream(shopFile.getPath(),true));
bytesWritten = new File(shopFile.getPath()).length();
bis.skip(bytesWritten);
}
byte[] bytes = new byte[4096];
int len;
while ((len = bis.read(bytes))!=-1){
bos.write(bytes,0,len);
bytesWritten+=len;
redisTemplate.opsForValue().set(uid+"-bytesWritten",bytesWritten+"");
bos.flush();
String time = (String) redisTemplate.opsForValue().get(uid + "-time");
if (!time.equals("0")){
long oldTime = Long.parseLong(time);
//然后获取当前时间
long newTime = System.currentTimeMillis();
//当前时间-旧的时间 >= 10秒
//就认为用户刷新或关闭浏览器 ==> 终止上传操作
if (newTime-oldTime >= 100000){
redisTemplate.opsForValue().set(uid + "-bytesWritten", "0");
redisTemplate.opsForValue().set(uid + "-AllSize", "0");
redisTemplate.opsForValue().set(uid + "-time","0");
break;
}
}
}
bos.close();
bis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
3、MD5工具类
import org.springframework.util.DigestUtils;
/**
* MD5工具类
* @author pibigstar
*
*/
public class MD5Util {
/**
* 生成md5
* @return
*/
public static String getMD5(String str) {
String base = str;
String md5 = DigestUtils.md5DigestAsHex(base.getBytes());
return md5;
}
}
4、OSS工具类
package com.schoolSys.common.utils;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import org.springframework.web.multipart.MultipartFile;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.util.UUID;
public class OSSUtil {
public static String endpoint="https://oss-cn-hangzhou.aliyuncs.com";
public static String AccessKey_ID="LTAI4G8zHYsDizPXSvgJPccV";
public static String AccessKey_Secret="lvzNO0DZBBWGSHj0L1HJ4mmLpluaXT";
public static String BucketName="david1234";
public static String path="https://david1234.oss-cn-hangzhou.aliyuncs.com/";
public static String putObject(MultipartFile file){
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, AccessKey_ID, AccessKey_Secret);
// 上传文件到指定的存储空间(bucketName)并将其保存为指定的文件名称(objectName)。
String newName = getNewName(file.getOriginalFilename());
try {
ossClient.putObject(BucketName, newName, new ByteArrayInputStream(file.getBytes()));
} catch (IOException e) {
e.printStackTrace();
}
// 关闭OSSClient。
ossClient.shutdown();
return path+newName;
}
/**
* 获取文件的新名称
* @param oldName
* 文件旧名称
* @return
* 文件新名称: uuid+时间戳.后缀名
*/
public static String getNewName(String oldName){
// 获取图片后缀名
String suffixName = getFileSuffix(oldName);
String newName= UUID.randomUUID().toString()+System.currentTimeMillis()+suffixName;
return newName;
}
/**
* 获取文件后缀名
* @param fileName
* @return
*/
public static String getFileSuffix(String fileName){
return fileName.substring(fileName.lastIndexOf("."));
}
}
UploadController.java
package com.jf.controller.admin;
import com.alibaba.fastjson.JSONObject;
import com.jf.model.ShopFile;
import com.jf.model.User;
import com.jf.service.UploadService;
import com.jf.utils.BeanUtils;
import com.jf.utils.FileUtils;
import com.jf.vo.Result;
import com.jf.vo.SweetFile;
import org.apache.commons.io.FilenameUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpSession;
import java.io.File;
import java.io.IOException;
@Controller
public class UploadController {
@Autowired
private RedisTemplate redisTemplate;
@Autowired
private UploadService uploadService;
@RequestMapping("/upload")
@ResponseBody
public String upload(MultipartFile file, HttpSession session) throws IOException {
String path = "E:/file/";
Result rs = new Result();
Object obj = session.getAttribute("user");
if (obj != null){
User user = (User) obj;
String uid = user.getUid();
//重置文件总大小
redisTemplate.opsForValue().set(user.getUid()+"-AllSize","0");
//设置文件总大小
redisTemplate.opsForValue().set(user.getUid()+"-AllSize",file.getSize()+"");
//获取文件后缀名
String extension = FilenameUtils.getExtension(file.getOriginalFilename());
// 获取文件新名
String filename = BeanUtils.getImgName()+"."+extension;
// 获取就名字的目的是为了防止用户上传同名文件覆盖
String oldName = file.getOriginalFilename();
// 设置状态码
redisTemplate.opsForValue().set(user.getUid()+"-status","1");
// 进行MD5计算
String MD5 = FileUtils.getMd5(file);
ShopFile shopFile = uploadService.getFileByMD5(MD5);
// MD5 存在时有两种可能
if (shopFile != null){
if (file.getSize() == new File(shopFile.getPath()).length()){
// 已上传,开始秒传,其实是把文件在服务器内的引用给到用户名下
uploadService.saveUserFile(shopFile.getMd5(),uid,oldName);
//设置状态码
redisTemplate.opsForValue().set(user.getUid()+"-status","3");
//把redis服务器里的上传大小改为总大小
redisTemplate.opsForValue().set(uid + "-bytesWritten",file.getSize()+"");
rs.setStatus(200);
rs.setData(shopFile.getPath());
}else{
// 文件已经上传了一部分,开始断点续传
// 设置状态码
redisTemplate.opsForValue().set(user.getUid()+"-status","2");
FileUtils.upload(file,redisTemplate,shopFile,uid,filename);
// 存入用户列表
uploadService.saveUserFile(MD5,uid,oldName);
//设置状态码
redisTemplate.opsForValue().set(user.getUid()+"-status","3");
rs.setStatus(200);
rs.setData(path+filename);
}
}else{
//将文件信息放入数据库
ShopFile sf = new ShopFile();
sf.setFilename(filename);
sf.setOldname(oldName);
sf.setMd5(MD5);
sf.setPath(path+filename);
sf.setUid(uid);
sf.setTime(System.currentTimeMillis()+"");
uploadService.saveShopFile(sf);
// 设置状态码
redisTemplate.opsForValue().set(user.getUid()+"-status","2");
FileUtils.upload(file,redisTemplate,shopFile,uid,filename);
// 存入用户列表
uploadService.saveUserFile(MD5,uid,oldName);
//设置状态码
redisTemplate.opsForValue().set(user.getUid()+"-status","3");
rs.setStatus(200);
rs.setData(path+filename);
}
}
return JSONObject.toJSONString(rs);
}
@RequestMapping("/process")
@ResponseBody
public String process(HttpSession session){
User user = (User) session.getAttribute("user");
String uid=user.getUid();
//实时上传大小
String bytesWritten = (String) redisTemplate.opsForValue().get(uid + "-bytesWritten");
//文件总大小
String AllSize = (String) redisTemplate.opsForValue().get(uid + "-AllSize");
//记录文件的上传状态
String status = (String) redisTemplate.opsForValue().get(uid + "-status");
//每次都重新装载一次时间,这样就可以记录进度条的执行了
redisTemplate.opsForValue().set(uid + "-time",System.currentTimeMillis()+"");
//把值放到对象里
SweetFile file=new SweetFile();
file.setThisSize(bytesWritten);
file.setAllSize(AllSize);
file.setStatus(status);
//把对象放到result里
Result rs = Result.ok(file);
return JSONObject.toJSONString(rs);
}
@RequestMapping("/initUpload")
@ResponseBody
public String initUpload(HttpSession session){
User user = (User) session.getAttribute("user");
String uid=user.getUid();
//更新redis
redisTemplate.opsForValue().set(uid + "-bytesWritten","0");
redisTemplate.opsForValue().set(uid + "-AllSize","0");
redisTemplate.opsForValue().set(uid + "-time","0");
redisTemplate.opsForValue().set(uid + "-status","0");
return JSONObject.toJSONString(Result.ok());
}
@RequestMapping("/getAllFile")
@ResponseBody
public String getAllFile(HttpSession session){
User user = (User) session.getAttribute("user");
Result rs = uploadService.getAllFile(user.getUid());
return JSONObject.toJSONString(rs);
}
}
版权声明:本文为weixin_46113888原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。