package com.aliyunoss.utils;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSSClient;
import com.aliyun.oss.OSSErrorCode;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.ServiceException;
import com.aliyun.oss.model.CannedAccessControlList;
import com.aliyun.oss.model.GetObjectRequest;
import com.aliyun.oss.model.OSSObjectSummary;
import com.aliyun.oss.model.ObjectListing;
import com.aliyun.oss.model.ObjectMetadata;
public class AliOssUtil {
private static final String ACCESS_ID = "";//换为自己的
private static final String ACCESS_KEY = "";//换为自己的
private static final String BUCKETNAME = "";//换为自己的
private static final String ENDPOINT = "";//换为自己的
// 创建Bucket.
public static void ensureBucket(OSSClient client, String bucketName)
throws OSSException, ClientException{
try {
// 创建bucket
client.createBucket(bucketName);
} catch (ServiceException e) {
if (!OSSErrorCode.BUCKET_ALREADY_EXISTS.equals(e.getErrorCode())) {
// 如果Bucket已经存在,则忽略
throw e;
}
}
}
// 删除一个Bucket和其中的Objects
public static void deleteBucket(OSSClient client, String bucketName)
throws OSSException, ClientException {
ObjectListing ObjectListing = client.listObjects(bucketName);
List<OSSObjectSummary> listDeletes = ObjectListing
.getObjectSummaries();
for (int i = 0; i < listDeletes.size(); i++) {
String objectName = listDeletes.get(i).getKey();
// 如果不为空,先删除bucket下的文件
client.deleteObject(bucketName, objectName);
}
client.deleteBucket(bucketName);
}
// 把Bucket设置为所有人可读
public static void setBucketPublicReadable(OSSClient client, String bucketName)
throws OSSException, ClientException {
//创建bucket
client.createBucket(bucketName);
//设置bucket的访问权限,public-read-write权限
client.setBucketAcl(bucketName, CannedAccessControlList.PublicReadWrite);
}
/**
* // 上传文件
* @param client
* @param bucketName
* @param key
* @param filename
* @throws OSSException
* @throws ClientException
* @throws FileNotFoundException
*/
private static void uploadFile(OSSClient client, String bucketName, String filename,String key)
throws OSSException, ClientException, FileNotFoundException {
key = key.replace("\\", "/");
File file = new File(filename);
ObjectMetadata objectMeta = new ObjectMetadata();
objectMeta.setContentLength(file.length());
InputStream input = new FileInputStream(file);
client.putObject(bucketName, key, input, objectMeta);
}
/**
* TODO 同步到oss上
* @param filePath文件本地路径
* @param key oss上文件绝对路径
*/
public static void uploadFile(String filePath,String key){
OSSClient client = new OSSClient(ENDPOINT, ACCESS_ID, ACCESS_KEY);
try {
String tmp = key;
if (key.substring(0, 1).equals("/")) {
tmp = key.substring(1, key.length());
}
AliOssUtil.uploadFile(client, BUCKETNAME, filePath, tmp);
} catch (Exception e) {
e.printStackTrace();
}
}
// 下载文件
public static void downloadFile(OSSClient client, String bucketName, String key, String filename)
throws OSSException, ClientException {
client.getObject(new GetObjectRequest(bucketName, key),
new File(filename));
}
/**
* TODO 根据文件名生成带有日期的文件相对路径
* @param fileName
* @return
* @throws
*/
public static String getFileDatePath(String fileName) {
SimpleDateFormat sf = new SimpleDateFormat("yyyyMMddHHmmss");
String fileStr = sf.format(new Date());
fileName = String.format("qr-%s.png", fileName);
String tempPath = String.join("/", fileStr.substring(0, 4), fileStr.substring(4, 6),
fileStr.substring(6, 8), fileStr.substring(8, 10), fileName);
return tempPath;
}
}