package com.demo.common.oss;
import com.aliyun.oss.OSSClient;
import com.aliyun.oss.model.*;
import com.demo.common.file.FilePropertiesUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.multipart.MultipartFile;
import javax.swing.filechooser.FileSystemView;
import java.io.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
* @class:AliyunOSSClientUtil
* @descript:java使用阿里云OSS存储对象上传图片
* @date:2018年6月22日 下午5:58:08
* @author qing
*/
public class OSSClientUtil {
public final static String SAVEPATH = "/tmp/";
//log日志
private static Logger logger = LoggerFactory.getLogger(OSSClientUtil.class);
//阿里云API的内或外网域名
private static String ENDPOINT;
//阿里云API的密钥Access Key ID
private static String ACCESS_KEY_ID;
//阿里云API的密钥Access Key Secret
private static String ACCESS_KEY_SECRET;
//阿里云API的bucket名称
private static String BACKET_NAME;
//阿里云API的文件夹名称
private static String FOLDER;
//阿里云API的文件夹路径
private static String FOLDERGROUP;
//阿里云API的文件夹子路径
private static String PATH;
private static final String COMPRESS = "compress";
//初始化属性
static{
ENDPOINT = FilePropertiesUtil.getEndpoint();
ACCESS_KEY_ID = FilePropertiesUtil.getAccessKeyId();
ACCESS_KEY_SECRET = FilePropertiesUtil.getAccessKeySecret();
BACKET_NAME = FilePropertiesUtil.getBucket();
PATH = FilePropertiesUtil.getImgFilePath();
}
/**
* 获取阿里云OSS客户端对象
* 并设置跨域资源共享规则
* 以下代码用于设置指定存储空间的跨域资源共享规则,已存在的规则将被覆盖
* @return ossClient
*/
private static OSSClient getOSSClient(){
// 创建OSSClient实例。
return new OSSClient(ENDPOINT,ACCESS_KEY_ID, ACCESS_KEY_SECRET);
}
/**
* 上传到阿里云并设置为公共读权限
* @param inputStream
* @param fileName
* @return
*/
public static String upload(InputStream inputStream, String fileName){
OSSClient client = getOSSClient();
//上传图片
client.putObject(BACKET_NAME, PATH + fileName, inputStream);
//修改文件ACL权限为公共读
client.setObjectAcl(BACKET_NAME, PATH + fileName, CannedAccessControlList.PublicRead);
client.shutdown();
return "https://" + BACKET_NAME + "." + ENDPOINT + "/" + PATH + fileName;
}
/**
* 上传文件 MultipartFile
**/
public static Map<String, Object> upload(MultipartFile file, String fileName) throws IOException{
OSSClient ossClient=OSSClientUtil.getOSSClient();
return send(ossClient,file,BACKET_NAME,FOLDERGROUP,fileName);
}
/**
* 上传文件 File
**/
public static Map<String, Object> upload(File file, String fileName) throws IOException{
OSSClient ossClient=OSSClientUtil.getOSSClient();
return send(ossClient,file,BACKET_NAME,FOLDERGROUP,fileName);
}
/**
* 删除文件
* @param key 文件url
**/
public static void delete(String key) throws IOException{
OSSClient ossClient=OSSClientUtil.getOSSClient();
deleteFile(ossClient,BACKET_NAME,FOLDER,key);
}
/**
* 获取文件连接
* @param key 文件url
**/
public static String getUrl(String key) throws IOException{
OSSClient ossClient=OSSClientUtil.getOSSClient();
//获取CORS规则列表。
// ArrayList<SetBucketCORSRequest.CORSRule> corsRules = (ArrayList<SetBucketCORSRequest.CORSRule>) ossClient.getBucketCORSRules(BACKET_NAME);
return getImg(ossClient,BACKET_NAME,FOLDER,key);
}
/**
* 获取原图文件连接
* @param key 压缩图url
**/
public static String getRawUrl(String key) throws IOException{
OSSClient ossClient=OSSClientUtil.getOSSClient();
//获取CORS规则列表。
// ArrayList<SetBucketCORSRequest.CORSRule> corsRules = (ArrayList<SetBucketCORSRequest.CORSRule>) ossClient.getBucketCORSRules(BACKET_NAME);
key = key.substring(COMPRESS.length());
return getImg(ossClient,BACKET_NAME,FOLDER,key);
}
/**
* 上传图片至OSS 如果同名文件会覆盖服务器上的
* @param ossClient oss连接
* @param file 上传文件(文件全路径如:D:\\image\\cake.jpg)
* @param bucketName 存储空间
* @param folder 模拟文件夹名 如"qj_nanjing/"
* @return String 返回的唯一MD5数字签名
* */
public static Map<String, Object> send(OSSClient ossClient, MultipartFile file, String bucketName, String folder,String fileName) {
InputStream instream = null;
Map<String, Object> map = new HashMap<String, Object>();
try {
//以输入流的形式上传文件
instream = file.getInputStream();
//文件名
// String fileName = file.getOriginalFilename().replaceAll("\\s*", "");// 去除名称空格
//文件大小
Long fileSize = file.getSize();
//创建上传Object的Metadata
ObjectMetadata metadata = new ObjectMetadata();
//上传的文件的长度
uploadToOss(ossClient, bucketName, folder, fileName, instream, map, fileSize, metadata);
//解析结果
}
catch (IOException e) {
e.printStackTrace();
logger.error("上传阿里云OSS服务器异常." + e.getMessage(), e);
} finally {
try {
if (instream != null) {
instream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return map;
}
/**
* 上传图片至OSS 如果同名文件会覆盖服务器上的
* @param ossClient oss连接
* @param file 上传文件(文件全路径如:D:\\image\\cake.jpg)
* @param bucketName 存储空间
* @param folder 模拟文件夹名 如"qj_nanjing/"
* @return String 返回的唯一MD5数字签名
* */
public static Map<String, Object> send(OSSClient ossClient, File file, String bucketName, String folder,String fileName) {
InputStream instream = null;
Map<String, Object> map = new HashMap<String, Object>();
try {
//以输入流的形式上传文件
instream = new FileInputStream(file);
//文件名
// String fileName = file.getName();
//文件大小
Long fileSize = file.length();
//创建上传Object的Metadata
ObjectMetadata metadata = new ObjectMetadata();
uploadToOss(ossClient, bucketName, folder, fileName, instream, map, fileSize, metadata);
//解析结果
}
catch (Exception e) {
e.printStackTrace();
logger.error("上传阿里云OSS服务器异常." + e.getMessage(), e);
} finally {
try {
if (instream != null) {
instream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return map;
}
private static void uploadToOss(OSSClient ossClient, String bucketName, String folder, String fileName, InputStream instream, Map<String, Object> map, Long fileSize, ObjectMetadata metadata) throws IOException {
//上传的文件的长度
metadata.setContentLength(ins
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
UEditor例子,图片上传+视频上传 (759个子文件)
OSSClientUtil.class 14KB
OSSClientUtil.class 14KB
FileUtil.class 12KB
FileUtil.class 12KB
JSONUtils.class 7KB
JSONUtils.class 7KB
ConfigManager.class 6KB
ConfigManager.class 6KB
BinaryUploader.class 5KB
BinaryUploader.class 5KB
ImageHunter.class 5KB
ImageHunter.class 5KB
VodUtil.class 5KB
VodUtil.class 5KB
BinaryUploader.class 4KB
BinaryUploader.class 4KB
StorageManager.class 4KB
StorageManager.class 4KB
ActionEnter.class 4KB
ActionEnter.class 4KB
PathFormat.class 4KB
PathFormat.class 4KB
ImageCompressUtil.class 4KB
ImageCompressUtil.class 4KB
UploadOSSUtil.class 4KB
UploadOSSUtil.class 4KB
FileManager.class 4KB
FileManager.class 4KB
MultiState.class 4KB
MultiState.class 4KB
BaseState.class 3KB
BaseState.class 3KB
DemoController.class 3KB
DemoController.class 3KB
FilePropertiesUtil.class 3KB
FilePropertiesUtil.class 3KB
Base64.class 3KB
Base64.class 3KB
Base64Uploader.class 3KB
Base64Uploader.class 3KB
Uploader.class 2KB
Uploader.class 2KB
OutputStreamUtil.class 2KB
OutputStreamUtil.class 2KB
AppInfo.class 1KB
AppInfo.class 1KB
Information.class 1KB
Information.class 1KB
JSONUtils$1.class 1KB
JSONUtils$1.class 1KB
JSONUtils$2.class 1KB
JSONUtils$2.class 1KB
JSONUtils$3.class 1KB
JSONUtils$3.class 1KB
Result.class 1KB
Result.class 1KB
AppInfo$1.class 1KB
AppInfo$1.class 1KB
CloseableUtil.class 1KB
CloseableUtil.class 1KB
ActionMap.class 1KB
ActionMap.class 1KB
FileType.class 1KB
FileType.class 1KB
StringPool.class 1KB
StringPool.class 1KB
Encoder.class 1KB
Encoder.class 1KB
ActionState.class 1KB
ActionState.class 1KB
ActionMap$1.class 899B
ActionMap$1.class 899B
MIMEType.class 822B
MIMEType.class 822B
MIMEType$1.class 760B
MIMEType$1.class 760B
FileException.class 694B
FileException.class 694B
FileType$1.class 611B
FileType$1.class 611B
State.class 287B
State.class 287B
.classpath 2KB
org.eclipse.wst.common.component 656B
org.eclipse.wst.jsdt.ui.superType.container 49B
ueditor.css 44KB
ueditor.css 44KB
ueditor.min.css 34KB
ueditor.min.css 34KB
video-js.css 21KB
video-js.css 21KB
image.css 19KB
image.css 19KB
video.css 15KB
video.css 15KB
attachment.css 15KB
attachment.css 15KB
video-js.min.css 11KB
video-js.min.css 11KB
shCoreDefault.css 7KB
共 759 条
- 1
- 2
- 3
- 4
- 5
- 6
- 8
资源评论
- kgl12252022-12-10下载了,还可以,不错!
Null_越努力越幸运
- 粉丝: 4
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功