package com.verse.hades.utils;

import com.aliyun.oss.OSSClient;
import com.aliyun.oss.common.auth.CredentialsProvider;
import com.aliyun.oss.common.auth.DefaultCredentialProvider;
import com.aliyun.oss.model.ObjectMetadata;
import com.aliyun.oss.model.PutObjectResult;
import com.verse.hades.config.OSSConfig;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.multipart.MultipartFile; import java.io.*;
import java.net.URL;
import java.util.Date; @Slf4j
public class OSSClientUtil {
//阿里云OSS API的内或外网域名
private static String ENDPOINT;
//阿里云OSS API的密钥Access Key ID  
private static String ACCESS_KEY_ID;
//阿里云OSS API的密钥Access Key Secret  
private static String ACCESS_KEY_SECRET;
//阿里云OSS API的bucket名称  
private static String BUCKET_NAME;
//阿里云OSS 上传文件夹
private static String IMAGE_FOLDER; private static CredentialsProvider credentialsProvider; private static final long IMAGE_EXPIRE_TIME = 10 * 365 * 24 * 60 * 60 * 1000L;//图片访问链接的过期时间 private static OSSClient ossClient; public OSSClientUtil() {
ossClient = new OSSClient(ENDPOINT, credentialsProvider, null);
} public static void setConfigInfo(OSSConfig ossClientConfig) {
OSSClientUtil.ENDPOINT = ossClientConfig.getEndpoint();
OSSClientUtil.ACCESS_KEY_ID = ossClientConfig.getAccessKeyId();
OSSClientUtil.ACCESS_KEY_SECRET = ossClientConfig.getAccessKeySecret();
OSSClientUtil.BUCKET_NAME = ossClientConfig.getBucketName();
OSSClientUtil.IMAGE_FOLDER = ossClientConfig.getImageFolder(); credentialsProvider = new DefaultCredentialProvider(ACCESS_KEY_ID, ACCESS_KEY_SECRET);
} /**
* 初始化
*/
public static void init() {
ossClient = new OSSClient(ENDPOINT, credentialsProvider, null);
} /**
* 销毁
*/
public static void destory() {
ossClient.shutdown();
} /**
* @param: instream
* @param: fileName
* @Return: java.lang.String
* @Decription: 上传图片至OSS
* @CreateDate: Created in 2018/12/11 16:36
* @Modify:
*/
public static String uploadImageToOSS(MultipartFile file, String fileName) {
if (ossClient == null) {
init();
} String ret = "";
try {
//创建上传Object的Metadata
ObjectMetadata objectMetadata = new ObjectMetadata();
objectMetadata.setContentLength(file.getInputStream().available());
objectMetadata.setCacheControl("no-cache");
objectMetadata.setHeader("Pragma", "no-cache");
objectMetadata.setContentType(getcontentType(file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."))));
objectMetadata.setContentDisposition("inline;filename=" + fileName);
//上传文件
PutObjectResult putResult = ossClient.putObject(BUCKET_NAME, IMAGE_FOLDER + fileName, file.getInputStream(), objectMetadata);
ret = putResult.getETag();
} catch (IOException e) {
log.error("upload file to oss error name={}", fileName, e);
} finally {
try {
if (file.getInputStream() != null) {
file.getInputStream().close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
return ret;
} /**
* @param: FilenameExtension
* @Return: java.lang.String
* @Decription: 判断OSS服务文件上传时文件的contentType
* @CreateDate: Created in 2018/12/11 17:19
* @Modify:
*/
private 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";
} /**
* @param: fileName
* @Return: java.lang.String
* @Decription: 根据图片名称获取图片访问地址
* @CreateDate: Created in 2018/12/11 17:18
* @Modify:
*/
public static String getImageUrl(String fileName) {
// 设置URL过期时间
Date expiration = new Date(new Date().getTime() + IMAGE_EXPIRE_TIME);
// 生成URL
URL url = ossClient.generatePresignedUrl(BUCKET_NAME, IMAGE_FOLDER + fileName, expiration);
if (url != null) {
return url.toString();
}
return null;
}
}

使用阿里云对象存储OSS上传图片工具类的更多相关文章

  1. 阿里云对象存储OSS与文件存储NAS的区别

    一.简介 应用场景:选择一款存储产品,面向文档数据的存取,不会涉及到数据处理. 产品选型主要从OSS和NAS中选择一款,满足文档存储的需求. 二.NAS优缺点 NAS 是一种采用直接与网络介质相连的特 ...

  2. 阿里云对象存储OSS访问控制

    阿里云对象存储OSS的Android SDK提供了STS鉴权模式和自签名模式来保障移动终端的安全性. OSS可以通过阿里云STS (Security Token Service) 进行临时授权访问.交 ...

  3. 阿里云对象存储OSS使用 HTTPS

    一.前言 阿里云对象存储oss本身也是可以用HTTPS直接访问的,但是它本身的地址是http://***.oss-cn-hangzhou.aliyuncs.com这样的,那么如果我们想使用自己的域名, ...

  4. Delphi阿里云对象存储OSS【支持上传文件、下载文件、删除文件、创建目录、删除目录、Bucket操作等】

    作者QQ:(648437169) 点击下载➨Delphi阿里云对象存储OSS             阿里云api文档 [Delphi阿里云对象存储OSS]支持 获取Bucket列表.设置Bucket ...

  5. 阿里云对象存储OSS

    阿里云的产品种类繁多,今天让我们一起来了解下对象存储(Object Storage Service,简称OSS)吧! 什么是对象存储呢? 简单来说,对象存储OSS是阿里云提供的海量.安全和高可靠的云存 ...

  6. 阿里云对象存储OSS支持版本管理特性

    阿里云对象存储OSS现已经全面支持“对象版本管理”特性.该功能适用于所有的存储类型以及区域.当Bucket启用该特性后,“对象版本管理”功能可以保护和恢复误删除.误覆盖的数据. 对象存储OSS“版本管 ...

  7. 阿里云对象存储OSS及CDN加速配置

    目录 十大云存储服务商 1. 登陆阿里云官网,开通对象存储服务 OSS 2. 创建存储空间 3. 绑定自定义域名 4. 配置阿里云CDN加速 5. 购买阿里云免费SSL证书 6. 阿里云CDN配置HT ...

  8. java开发之阿里云对象存储OSS和云数据库Memcache的使用

    web开发中标配:aliyun ECS(阿里云服务器),aliyun RDS(阿里云数据库),aliyun OSS(阿里云对象存储),aliyun Memcache(阿里云缓存数据库). 今天就介绍下 ...

  9. 阿里云对象存储 OSS 应用服务器搭建代码

    背景说明 最近做一个APP客户端图片直传阿里云OSS的服务,需要在后台开一个阿里云的OSSToken获取的接口. 阿里云官方文档地址:快速搭建移动应用直传服务. 略过移动端说明,直接看服务端的. 不是 ...

随机推荐

  1. Android+Jquery Mobile学习系列(2)-HTML5/Jquery Mobile基础

    本章介绍两个关键字[HTML5]和[Jquery Mobile],简单说这两者的关系是:HTML5作为主体,Jquery Mobile在HTML5的基础上对其进行了优化.装饰. HTML5 HTML5 ...

  2. sqlserver 创建维护计划失败(SQL Server: 14234 错误)自动备份数据库计划

    创建维护计划失败(SQL Server: 14234 错误) (2011-06-25 14:44:24) 转载▼ 标签: 杂谈 分类: MSSQL 错误信息:对于 JobStep ' testBak ...

  3. hdu 4704(费马小定理+快速幂取模)

    Sum                                                                                Time Limit: 2000/ ...

  4. HTTP权威协议笔记-8.集成点:网关、隧道及中继

    .8.1 网关 定义:网关类似与翻译器,它抽象出了一种能够到达资源的方法. 实用:网关可以自动将HTTP流量转换为其他协议,这样使用HTTP协议的一方就不需要了解其他协议,也可实现与其他程序或设备交互 ...

  5. selenium3 + python3 - alert定位

    一.alert\confirm\prompt弹出框操作主要方法有: text:获取文本值 accept() :点击"确认" dismiss() :点击"取消"或 ...

  6. linux ssh文件输

    在linux下一般用scp这个命令来通过ssh传输文件. 1.从服务器上下载文件scp username@servername:/path/filename /var/www/local_dir(本地 ...

  7. # 深入理解Redis(二)——内存管理的建议与技巧

    引语 随着使用Redis的深入,我们不可避免的需要深入了解优化Redis的内存,本章将重点讲解Redis的内存优化之道,同时推荐大家阅读memory-optimization一文. 想要高效的使用Re ...

  8. C - cAPS lOCK

    Problem description wHAT DO WE NEED cAPS LOCK FOR? Caps lock is a computer keyboard key. Pressing it ...

  9. 5.14web相关概念

    1.软件架构 1.C/S:客户端/服务器端 2.B/S:浏览器/服务器端 2.资源分类 1.静态资源:所有用户访问后,得到的结果都是一样的,称为静态资源.静态资源可以直接被浏览器解析如:html,cs ...

  10. mvc3结合spring.net-依赖注入

    namespace Tuzi.Models.IService { public interface IPersonService { string say(string words); } names ...