【阿里OSS】java后台集成OSS的SDK之版本升级及工具封装
环境:
maven 3.0
jdk 1.8
原oss版本2.8.3
升级后为:3.5.0
pom依赖:
com.aliyun.oss aliyun-sdk-oss 3.5.0
配置文件添加:
# ======= 阿里OSS配置 ========= aliyun.OSS.endpoint=http://oss-cn-beijing.aliyuncs.com aliyun.OSS.accessKeyId= 自个的KEY aliyun.OSS.accessKeySecret= 同上 aliyun.OSS.bucketName=afinal2mc #自己定义的存储空间 aliyun.OSS.filedir=sys/ #自己在存储空间创建的文件夹 aliyun.OSS.fileMaxSize=10 #文件上传最大M数
封装util
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.DeleteObjectsRequest;
import com.aliyun.oss.model.DeleteObjectsResult;
import com.aliyun.oss.model.ObjectMetadata;
import com.aliyun.oss.model.PutObjectResult;
import com.jeeplus.common.utils.DateUtils;
import com.jeeplus.common.utils.PropertiesLoader;
import com.jeeplus.common.utils.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;import java.io.*;
import java.net.URL;
import java.util.Date;
import java.util.List;/*** @ProjectName: Hematopathy* @Package: com.jeeplus.oss.utils* @ClassName: OSSUtil* @Author: MC* @Description: ${description}* @Date: 2019/11/16 0016 10:34* @Version: 1.0*/
@Component
public class OSSClientUtil {protected PropertiesLoader loader = new PropertiesLoader("你的.properties"); //获取配置文件参数Log log = LogFactory.getLog(OSSClientUtil.class);private String endpoint = loader.getProperty("aliyun.OSS.endpoint");private String accessKeyId = loader.getProperty("aliyun.OSS.accessKeyId");private String accessKeySecret = loader.getProperty("aliyun.OSS.accessKeySecret");//空间private String bucketName = loader.getProperty("aliyun.OSS.bucketName");//文件存储目录private String filedir = loader.getProperty("aliyun.OSS.filedir");//上传最大限制private int fileMaxSize = Integer.parseInt(loader.getProperty("aliyun.OSS.fileMaxSize"));public OSS getOssClient(){return new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);}/*** 销毁*/public void destory(OSS ossClient) {ossClient.shutdown();}/*** 上传图片** @param url*/public void uploadImg2Oss(String url,OSS ossClient) throws FileNotFoundException {File fileOnServer = new File(url);FileInputStream fin;fin = new FileInputStream(fileOnServer);String[] split = url.split("/");this.uploadFile2OSS(fin, split[split.length - 1],ossClient);}public String uploadImg2Oss(MultipartFile file,OSS ossClient) throws IOException {if (file.getSize() > 1024 * 1024 * fileMaxSize) {throw new IOException("上传图片大小不能超过"+fileMaxSize+"M!");}String originalFilename = file.getOriginalFilename();String substring = originalFilename.substring(originalFilename.lastIndexOf(".")).toLowerCase();Date now = new Date();String nowStr = DateUtils.formatDateTime(now);String name = nowStr.replace(" ","MC") + substring;InputStream inputStream = file.getInputStream();this.uploadFile2OSS(inputStream, name,ossClient);return name;}/*** 获得图片路径** @param fileUrl* @return*/public String getImgUrl(String fileUrl,OSS ossClient) {if (!StringUtils.isEmpty(fileUrl)) {String[] split = fileUrl.split("/");return this.getUrl(this.filedir + split[split.length - 1],ossClient);}return null;}/*** 上传到OSS服务器 如果同名文件会覆盖服务器上的** @param instream 文件流* @param fileName 文件名称 包括后缀名* @return 出错返回"" ,唯一MD5数字签名*/public String uploadFile2OSS(InputStream instream, String fileName,OSS ossClient) {String ret = "";try {//创建上传Object的MetadataObjectMetadata objectMetadata = new ObjectMetadata();objectMetadata.setContentLength(instream.available());objectMetadata.setCacheControl("no-cache");objectMetadata.setHeader("Pragma", "no-cache");objectMetadata.setContentType(getcontentType(fileName.substring(fileName.lastIndexOf("."))));objectMetadata.setContentDisposition("inline;filename=" + fileName);//上传文件PutObjectResult putResult = ossClient.putObject(bucketName, filedir + fileName, instream, objectMetadata);ret = putResult.getETag();} catch (IOException e) {log.error(e.getMessage(), e);} finally {try {if (instream != null) {instream.close();}} catch (IOException e) {e.printStackTrace();}}return ret;}/*** Description: 判断OSS服务文件上传时文件的contentType** @param FilenameExtension 文件后缀* @return String*/public static String getcontentType(String FilenameExtension) {if (FilenameExtension.equalsIgnoreCase(".bmp")) {return "image/bmp";}if (FilenameExtension.equalsIgnoreCase(".gif")) {return "image/gif";}if (FilenameExtension.equalsIgnoreCase(".jpeg") ||FilenameExtension.equalsIgnoreCase(".jpg") ||FilenameExtension.equalsIgnoreCase(".png")) {return "image/jpeg";}if (FilenameExtension.equalsIgnoreCase(".html")) {return "text/html";}if (FilenameExtension.equalsIgnoreCase(".txt")) {return "text/plain";}if (FilenameExtension.equalsIgnoreCase(".vsd")) {return "application/vnd.visio";}if (FilenameExtension.equalsIgnoreCase(".pptx") ||FilenameExtension.equalsIgnoreCase(".ppt")) {return "application/vnd.ms-powerpoint";}if (FilenameExtension.equalsIgnoreCase(".docx") ||FilenameExtension.equalsIgnoreCase(".doc")) {return "application/msword";}if (FilenameExtension.equalsIgnoreCase(".xml")) {return "text/xml";}return "image/jpeg";}/*** 获得url链接** @param key* @return*/public String getUrl(String key,OSS ossClient) {// 设置URL过期时间为10年 3600l* 1000*24*365*10Date nowDate = new Date();long time = nowDate.getTime();Date expiration = new Date( time + 3600L * 1000 * 24 * 365 * 10);// 生成URLURL url = ossClient.generatePresignedUrl(bucketName, key, expiration);if (url != null) {return url.toString();}return null;}/*** 删除某个Object* http://127.0.0.1:8080/a/oss/del?url= sys/2019-11-16MC11:34:52.png* @param bucketUrl* @return*/public boolean deleteObject(String bucketUrl,OSS ossClient) {try {boolean b = ossClient.doesObjectExist(bucketName, bucketUrl);System.out.println("查询文件是否存在:"+b + "=================================");if(!b){System.out.println("Error: OSS file not find,file:{} ===============");return false;}// 删除Object.ossClient.deleteObject(bucketName, bucketUrl);} catch (Exception e) {e.printStackTrace();return false;} finally {this.destory(ossClient);}return true;}/*** 删除多个Object** @param bucketUrls* @return*/public boolean deleteObjects(List bucketUrls,OSS ossClient) {try {// 删除Object.DeleteObjectsResult deleteObjectsResult = ossClient.deleteObjects(new DeleteObjectsRequest(bucketName).withKeys(bucketUrls));List deletedObjects = deleteObjectsResult.getDeletedObjects();} catch (Exception e) {e.printStackTrace();return false;} finally {this.destory(ossClient);}return true;}
}
注意:2.0+使用的是OSSClient对象,而3.0+使用的是OSS对象。
创建方式也不一样,一个是newOSSClient一个是通过Builder对象获取
附带的日期工具类:
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List;import org.apache.commons.lang3.time.DateFormatUtils;/*** 日期工具类, 继承org.apache.commons.lang.time.DateUtils类* * @author jeeplus* @version 2014-4-15*/ public class DateUtils extends org.apache.commons.lang3.time.DateUtils {public static final String PATTERN_STANDARD = "yyyy-MM-dd HH:mm:ss";public static final String PATTERN_DATE = "yyyy-MM-dd";public static final String PARRERN_Hour_Minute = "HH:mm";private static String[] parsePatterns = { "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM","yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM", "yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss","yyyy.MM.dd HH:mm", "yyyy.MM" };/*** 得到几天前的时间* * @param d* @param day* @return*/public static Date getDateBefore(Date d, int day) {Calendar no = Calendar.getInstance();no.setTime(d);no.set(Calendar.DATE, no.get(Calendar.DATE) - day);return no.getTime();}/*** 得到当前日期字符串 格式(yyyy-MM-dd)*/public static String getDate() {return getDate("yyyy-MM-dd");}/*** 得到当前日期字符串 格式(yyyy-MM-dd) pattern可以为:"yyyy-MM-dd" "HH:mm:ss" "E"*/public static String getDate(String pattern) {return DateFormatUtils.format(new Date(), pattern);}/*** 得到日期字符串 默认格式(yyyy-MM-dd) pattern可以为:"yyyy-MM-dd" "HH:mm:ss" "E"*/public static String formatDate(Date date, Object... pattern) {String formatDate = null;if (pattern != null && pattern.length > 0) {formatDate = DateFormatUtils.format(date, pattern[0].toString());} else {formatDate = DateFormatUtils.format(date, "yyyy-MM-dd");}return formatDate;}/*** 得到日期时间字符串,转换格式(yyyy-MM-dd HH:mm:ss)*/public static String formatDateTime(Date date) {return formatDate(date, "yyyy-MM-dd HH:mm:ss");}/*** 得到当前时间字符串 格式(HH:mm:ss)*/public static String getTime() {return formatDate(new Date(), "HH:mm:ss");}/*** 得到当前日期和时间字符串 格式(yyyy-MM-dd HH:mm:ss)*/public static String getDateTime() {return formatDate(new Date(), "yyyy-MM-dd HH:mm:ss");}/*** 得到当前年份字符串 格式(yyyy)*/public static String getYear() {return formatDate(new Date(), "yyyy");}/*** 得到当前月份字符串 格式(MM)*/public static String getMonth() {return formatDate(new Date(), "MM");}/*** 得到当天字符串 格式(dd)*/public static String getDay() {return formatDate(new Date(), "dd");}/*** 得到当前星期字符串 格式(E)星期几*/public static String getWeek() {return formatDate(new Date(), "E");}public static int getWeekInt(){String week = getWeek();week = week.substring(week.length()-1, week.length());int weekInt = 0;if(week.equals("一")){return weekInt = 1;}else if(week.equals("二")){return weekInt = 2;}else if(week.equals("三")){return weekInt = 3;}else if(week.equals("四")){return weekInt = 4;}else if(week.equals("五")){return weekInt = 5;}else if(week.equals("六")){return weekInt = 6;}else {return weekInt = 7;}}/*** 日期型字符串转化为日期 格式 { "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm",* "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy.MM.dd",* "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm" }*/public static Date parseDate(Object str) {if (str == null) {return null;}try {return parseDate(str.toString(), parsePatterns);} catch (ParseException e) {return null;}}/*** 获取过去的天数* * @param date* @return*/public static long pastDays(Date date) {long t = System.currentTimeMillis() - date.getTime();return t / (24 * 60 * 60 * 1000);}/*** 获取过去的小时* * @param date* @return*/public static long pastHour(Date date) {long t = System.currentTimeMillis() - date.getTime();return t / (60 * 60 * 1000);}/*** 获取过去的分钟* * @param date* @return*/public static long pastMinutes(Date date) {long t = System.currentTimeMillis() - date.getTime();return t / (60 * 1000);}/*** 转换为时间(天,时:分:秒.毫秒)* * @param timeMillis* @return*/public static String formatDateTime(long timeMillis) {long day = timeMillis / (24 * 60 * 60 * 1000);long hour = (timeMillis / (60 * 60 * 1000) - day * 24);long min = ((timeMillis / (60 * 1000)) - day * 24 * 60 - hour * 60);long s = (timeMillis / 1000 - day * 24 * 60 * 60 - hour * 60 * 60 - min * 60);long sss = (timeMillis - day * 24 * 60 * 60 * 1000 - hour * 60 * 60 * 1000 - min * 60 * 1000 - s * 1000);return (day > 0 ? day + "," : "") + hour + ":" + min + ":" + s + "." + sss;}/*** 获取两个日期之间的天数* * @param before* @param after* @return*/public static int getDistanceOfTwoDate(Date before, Date after) {long beforeTime = before.getTime();long afterTime = after.getTime();return (int) ((afterTime - beforeTime) / (1000 * 60 * 60 * 24));}/*** 字符串转日期* * @param strDate* 字符串日期* @param pattern* 需要转换成的类型(YYYY-mm-dd)* @return*/public static Date string2Date(String strDate, String pattern) {if (strDate == null || strDate.equals("")) {throw new RuntimeException("str date null");}if (pattern == null || pattern.equals("")) {pattern = DateUtils.PATTERN_DATE;}SimpleDateFormat sdf = new SimpleDateFormat(pattern);Date date = null;try {date = sdf.parse(strDate);} catch (ParseException e) {throw new RuntimeException(e);}return date;}//根据给定的时间算出间隔天数public static String getBetweenDay(Date startDate,Date endDate){long res=endDate.getTime()-startDate.getTime();res=res/24/60/60/1000;return Long.toString(res);}//获取距今7天每天的日期,转换成stringpublic static ListgetDateStringList(){long time=86400000;Date date=new Date();List list=new ArrayList ();for (int i = 6; i >0 ; i--) {Date date2=new Date();long t=date.getTime()-time*i;date2.setTime(t);list.add(DateUtils.formatDateTime(date2));}list.add(DateUtils.formatDateTime(date));return list;}public static List getDateList(Date before, Date after, String str,String medicine_cycle) {long frequency=1;if ("medicine_cycle01".equals(medicine_cycle)) {frequency=1;}else if("medicine_cycle02".equals(medicine_cycle)){frequency=2;}else if("medicine_cycle03".equals(medicine_cycle)){frequency=3;}else if("medicine_cycle04".equals(medicine_cycle)){frequency=7;}else if("medicine_cycle05".equals(medicine_cycle)){frequency=14;}else if("medicine_cycle06".equals(medicine_cycle)){frequency=30;}List dates = new ArrayList ();long beforeTime = before.getTime();long afterTime = after.getTime();long day=1000 * 60 * 60 * 24*frequency;int days = (int) ((afterTime - beforeTime) / (1000 * 60 * 60 * 24*frequency));if (days>0) {for (int i = 0; i <=days; i++) {if (null != str && !"".equals(str)) {if (str.contains(";")) {String[] strings = str.split(";");for (String string : strings) {if (string.contains(":")) {String[] strings2 = string.split(":");Integer hour = Integer.parseInt(strings2[0]);Integer min = Integer.parseInt(strings2[1]);long time = 1000 * 60 * 60 * hour + 1000 * 60 * min;Date date=new Date();if (i==0) {date.setTime(beforeTime+time);dates.add(date);}else {beforeTime=beforeTime+day;date.setTime(beforeTime+time);dates.add(date);}} else if (string.contains(":")) {String[] strings2 = string.split(":");Integer hour = Integer.parseInt(strings2[0]);Integer min = Integer.parseInt(strings2[1]);long time = 1000 * 60 * 60 * hour + 1000 * 60 * min;Date date=new Date();if (i==0) {date.setTime(beforeTime+time);dates.add(date);}else{beforeTime=beforeTime+day;date.setTime(beforeTime+time);dates.add(date);}}}} else {if (str.contains(":")) {String[] strings2 = str.split(":");Integer hour = Integer.parseInt(strings2[0]);Integer min = Integer.parseInt(strings2[1]);long time = 1000 * 60 * 60 * hour + 1000 * 60 * min;Date date=new Date();if (i==0) {date.setTime(beforeTime+time);dates.add(date);}else{beforeTime=beforeTime+day;date.setTime(beforeTime+time);dates.add(date);}} else if (str.contains(":")) {String[] strings2 = str.split(":");Integer hour = Integer.parseInt(strings2[0]);Integer min = Integer.parseInt(strings2[1]);long time = 1000 * 60 * 60 * hour + 1000 * 60 * min;Date date=new Date();if (i==0) {date.setTime(beforeTime+time);dates.add(date);}else{beforeTime=beforeTime+day;date.setTime(beforeTime+time);dates.add(date);}}}}}}else{if (null != str && !"".equals(str)) {if (str.contains(";")) {String[] strings = str.split(";");for (String string : strings) {if (string.contains(":")) {String[] strings2 = string.split(":");Integer hour = Integer.parseInt(strings2[0]);Integer min = Integer.parseInt(strings2[1]);long time = 1000 * 60 * 60 * hour + 1000 * 60 * min;Date date=new Date();date.setTime(beforeTime+time);dates.add(date);} else if (string.contains(":")) {String[] strings2 = string.split(":");Integer hour = Integer.parseInt(strings2[0]);Integer min = Integer.parseInt(strings2[1]);long time = 1000 * 60 * 60 * hour + 1000 * 60 * min;Date date=new Date();date.setTime(beforeTime+time);dates.add(date);}}} else {if (str.contains(":")) {String[] strings2 = str.split(":");Integer hour = Integer.parseInt(strings2[0]);Integer min = Integer.parseInt(strings2[1]);long time = 1000 * 60 * 60 * hour + 1000 * 60 * min;Date date=new Date();date.setTime(beforeTime+time);dates.add(date);} else if (str.contains(":")) {String[] strings2 = str.split(":");Integer hour = Integer.parseInt(strings2[0]);Integer min = Integer.parseInt(strings2[1]);long time = 1000 * 60 * 60 * hour + 1000 * 60 * min;Date date=new Date();dates.add(date);}}}}return dates;}/*** date 转 String* @param date* @return*/public static String dateToString(Date date){SimpleDateFormat sdf = new SimpleDateFormat(PATTERN_DATE);return sdf.format(date);}public static String dateToStringYMDHMS(Date date){SimpleDateFormat sdf = new SimpleDateFormat(PATTERN_STANDARD);return sdf.format(date);}public static String dateToStringYMDHM(Date date){SimpleDateFormat sdf = new SimpleDateFormat(PATTERN_DATE + " " +PARRERN_Hour_Minute);return sdf.format(date);}public static Date stringToDateYMDHMS(String str) throws ParseException {SimpleDateFormat sdf = new SimpleDateFormat(PATTERN_STANDARD);return sdf.parse(str);}public static Date stringToDateYMD(String str) throws ParseException {SimpleDateFormat sdf = new SimpleDateFormat(PATTERN_DATE);return sdf.parse(str);}/*** CTS转UTC时间(加8小时)* @param date* @return*/public static Date CTSToUTC(Date date){//8小时误差修正long l=28800000L;date.setTime(date.getTime()+l);return date;}public static boolean isDateString(String datevalue, String dateFormat) {if (StringUtils.isEmpty(datevalue) || StringUtils.isEmpty(dateFormat)) {return false;}try {SimpleDateFormat fmt = new SimpleDateFormat(dateFormat);java.util.Date dd = fmt.parse(datevalue);if (datevalue.equals(fmt.format(dd))) {return true;} else {return false;}} catch (Exception e) {return false;}}public static int compare_date(String DATE1, String DATE2) {SimpleDateFormat df = new SimpleDateFormat(PATTERN_STANDARD);try {Date dt1 = df.parse(DATE1);Date dt2 = df.parse(DATE2);if (dt1.getTime() > dt2.getTime()) { // System.out.println("dt1 在dt2前");return 1;} else if (dt1.getTime() < dt2.getTime()) { // System.out.println("dt1在dt2后");return -1;} else {return 0;}} catch (Exception exception) {exception.printStackTrace();}return 0;}public static int compare_date(String DATE1, String DATE2,String foramt) {SimpleDateFormat df = new SimpleDateFormat(foramt);try {Date dt1 = df.parse(DATE1);Date dt2 = df.parse(DATE2);if (dt1.getTime() > dt2.getTime()) { // System.out.println("dt1 在dt2前");return 1;} else if (dt1.getTime() < dt2.getTime()) { // System.out.println("dt1在dt2后");return -1;} else {return 0;}} catch (Exception exception) {exception.printStackTrace();}return 0;}public static String getYesterday(){SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date date=new Date();Calendar calendar = Calendar.getInstance();calendar.setTime(date);calendar.add(Calendar.DAY_OF_MONTH, -1);date = calendar.getTime();return sdf.format(date);}}
控制器调用:
@Controller @RequestMapping(value = "${adminPath}/oss") public class OSSController {@Autowiredprivate OSSClientUtil ossClientUtil;//这个是上传后直接获取外网连接地址的,个人觉得还是很方便的@RequestMapping("uploadImg1")@ResponseBodypublic String uploadImg1(@RequestParam(value = "file", required = false) MultipartFile imgFile) throws IOException {OSS ossClient = ossClientUtil.getOssClient();String name = ossClientUtil.uploadImg2Oss(imgFile,ossClient);String imgUrl = ossClientUtil.getImgUrl(name,ossClient);ossClientUtil.destory(ossClient);return imgUrl;}}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
