package com.central.file.config.aliyun;
import com.alibaba.nacos.client.naming.utils.StringUtils;
import com.aliyun.oss.ClientBuilderConfiguration;
import com.aliyun.oss.OSSClient;
import com.aliyun.oss.model.Bucket;
import com.aliyun.oss.model.OSSObject;
import com.aliyun.oss.model.ObjectMetadata;
import com.aliyun.oss.model.PutObjectResult;
import com.central.common.utils.DateUtils;
import com.central.file.utils.UUIDUtils;
import com.sun.deploy.net.HttpUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.multipart.MultipartFile;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.net.URL;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
* @author sang
* @class:AliyunOSSClientUtil
* @descript:java使用阿里云OSS存储对象上传图片
* @date:2022年3月16日 下午5:58:08
*/
public class AliyunOSSClientUtil{
private static final Logger log = LoggerFactory.getLogger(HttpUtils.class);
private long bytesWritten = 0;
private long totalBytes = -1;
private boolean succeed = false;
private static String number;
//阿里云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;
//初始化
/* private static OSSClient ossClient=AliyunOSSClientUtil.getOSSClient();*/
//初始化属性
static {
ENDPOINT = OSSClientConstants.ENDPOINT;
ACCESS_KEY_ID = OSSClientConstants.ACCESS_KEY_ID;
ACCESS_KEY_SECRET = OSSClientConstants.ACCESS_KEY_SECRET;
BACKET_NAME = OSSClientConstants.BACKET_NAME;
FOLDER = OSSClientConstants.FOLDER;
}
/**
* 获取阿里云OSS客户端对象
*
* @return ossClient
*/
public static OSSClient getOSSClient() {
ClientBuilderConfiguration conf = new ClientBuilderConfiguration(); // 连接空闲超时时间,超时则关闭
conf.setIdleConnectionTime(1000); // 在这里可以做一些配置,比如超时时间、最大连
return new OSSClient(ENDPOINT, ACCESS_KEY_ID, ACCESS_KEY_SECRET);
}
/**
* 创建存储空间
*
* @param ossClient OSS连接
* @param bucketName 存储空间
* @return
*/
public static String createBucketName(OSSClient ossClient, String bucketName) {
//存储空间
final String bucketNames = bucketName;
if (!ossClient.doesBucketExist(bucketName)) {
//创建存储空间
Bucket bucket = ossClient.createBucket(bucketName);
log.info("创建存储空间成功");
return bucket.getName();
}
return bucketNames;
}
/**
* 删除存储空间buckName
*
* @param ossClient oss对象
* @param bucketName 存储空间
*/
public static void deleteBucket(OSSClient ossClient, String bucketName) {
ossClient.deleteBucket(bucketName);
log.info("删除" + bucketName + "Bucket成功");
}
/**
* 创建模拟文件夹
*
* @param ossClient oss连接
* @param bucketName 存储空间
* @param folder 模拟文件夹名如"qj_nanjing/"
* @return 文件夹名
*/
public static String createFolder(OSSClient ossClient, String bucketName, String folder) {
//文件夹名
final String keySuffixWithSlash = folder;
//判断文件夹是否存在,不存在则创建
if (!ossClient.doesObjectExist(bucketName, keySuffixWithSlash)) {
//创建文件夹
ossClient.putObject(bucketName, keySuffixWithSlash, new ByteArrayInputStream(new byte[0]));
log.info("创建文件夹成功");
//得到文件夹名
OSSObject object = ossClient.getObject(bucketName, keySuffixWithSlash);
String fileDir = object.getKey();
return fileDir;
}
return keySuffixWithSlash;
}
/**
* 根据key删除OSS服务器上的文件
*
* @param ossClient oss连接
* @param bucketName 存储空间
* @param folder 模拟文件夹名 如"qj_nanjing/"
* @param key Bucket下的文件的路径名+文件名 如:"upload/cake.jpg"
*/
public static void deleteFile(OSSClient ossClient, String bucketName, String folder, String key) {
ossClient.deleteObject(bucketName, folder + key);
log.info("删除" + bucketName + "下的文件" + folder + key + "成功");
}
//测试
public void main(String[] args) {
//初始化OSSClient
OSSClient ossClient = AliyunOSSClientUtil.getOSSClient();
//上传文件
String imgPath = "C:\\Users\\yaya\\Pictures\\内控项目图片\\yuan.png";
String[] file = imgPath.split(",");
for (String filename : file) {
//System.out.println("filename:"+filename);
File filess = new File(filename);
String md5key = this.uploadObject2OSS(ossClient, filess, BACKET_NAME, FOLDER).get("resultStr").toString();
log.info("上传后的文件MD5数字唯一签名:" + md5key);
//上传后的文件MD5数字唯一签名:40F4131427068E08451D37F02021473A
}
}
/**
* 上传图片至OSS
*
* @param ossClient oss连接
* @param file 上传文件(文件全路径如:D:\\image\\cake.jpg)
* @param bucketName 存储空间
* @param folder 模拟文件夹名 如"qj_nanjing/"
* @return Map 返回的唯一MD5数字签名 以及 对应的上传到文件的key
*/
public Map<String, Object> uploadObject2OSS(OSSClient ossClient, File file, String bucketName, String folder) {
String resultStr = null;
Map map = new HashMap();
try {
//以输入流的形式上传文件
InputStream is = new FileInputStream(file);
//文件名
String fileName = file.getName();
fileName.replace("/", "").replace("\\", "");
fileName = fileName.substring(0, fileName.lastIndexOf("."))
+ UUIDUtils.getUUID() + fileName.substring(fileName.lastIndexOf("."));
// key的组成
/*String newFileName= UUID.randomUUID().toString();*/
//文件大小
Long fileSize = file.length();
//创建上传Object的Metadata
ObjectMetadata metadata = new ObjectMetadata();
//上传的文件的长度
metadata.setContentLength(is.available());
//指定该Object被下载时的网页的缓存行为
metadata.setCacheControl("no-cache");
//指定该Object下设置Header
metadata.setHeader("Pragma", "no-cache");
//指定该Object被下载时的内容编码格式
metadata.setContentEncoding("utf-8");
//文件的MIME,定义文件的类型及网页编码,决定浏览器将以什么形式、什么编码读取文件。如果用户没有指定则根据Key或文件名的扩展名生成,
//如果没有扩展名则填默认值application/octet-stream
metadata.setContentType(this.getContentType(fileName));
//指定该Object被下载时的名称(指示MINME用户代理如何显示附加的文件,打开或下载,及文件名称)
metadata.setContentDisposition("filename/filesize=" + fileName + "/"
没有合适的资源?快使用搜索试试~ 我知道了~
阿里云OSS+七牛云和文件存储本地+FastDFS的文件存储代码
共37个文件
java:26个
yml:4个
xml:3个
需积分: 3 9 下载量 73 浏览量
2022-04-17
11:41:06
上传
评论 1
收藏 46KB ZIP 举报
温馨提示
图片上传、阿里云OSS、七牛云OSS、本地存储、FastDFS的文件存储配置,亲测有效。如果还不明白,查看教程https://blog.csdn.net/yaya_jn/article/details/124226092
资源详情
资源评论
资源推荐
收起资源包目录
file-center.zip (37个子文件)
file-center
pom.xml 5KB
file-center.iml 25KB
target
maven-status
maven-compiler-plugin
compile
default-compile
inputFiles.lst 3KB
createdFiles.lst 0B
classes
application.yml 2KB
mapper
FileMapper.xml 928B
bootstrap.yml 377B
generated-sources
annotations
src
main
resources
application.yml 2KB
mapper
FileMapper.xml 928B
bootstrap.yml 377B
java
com
central
FileCenterApp.java 709B
file
config
aliyun
AliyunOSSClientUtil.java 15KB
GetProgressSample.java 7KB
central - 快捷方式.lnk 1KB
PutObjectProgressListener.java 3KB
OSSClientConstants.java 840B
QiniuOSSAutoConfigure.java 3KB
MybatisPlusConfig.java 384B
AliyunOSSAutoConfigure.java 2KB
AsycTaskExecutorConfig.java 340B
FastdfsAutoConfigure.java 2KB
qiniu
UtilsSpringContext.java 3KB
RemoteFileServiceImplByQiniu.java 7KB
RemoteFileService.java 996B
UtilsUpload.java 3KB
model
ReturnMovo.java 1KB
FileInfo.java 2KB
properties
FileServerProperties.java 734B
OssProperties.java 472B
FdfsProperties.java 232B
mapper
FileMapper.java 491B
controller
FileController.java 5KB
AliyunFileController.java 6KB
service
IFileService.java 530B
impl
AbstractIFileService.java 3KB
utils
FileUtil.java 2KB
UUIDUtils.java 247B
共 37 条
- 1
30岁老阿姨
- 粉丝: 8803
- 资源: 7
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0