阿里OSS工具类

  • @return

*/

public static String upload(MultipartFile multipartFile) throws IOException {

// 获取上传的文件的输入流

InputStream inputStream = multipartFile.getInputStream();

// 获取文件名称

String fileName = multipartFile.getOriginalFilename();

// 避免文件覆盖

int i = fileName.lastIndexOf(“.”);

String suffix = fileName.substring(i);

fileName = fileName.substring(0, i) + System.currentTimeMillis() + suffix;

// 把文件按照日期进行分类

// 获取当前日期

String datePath = DateTimeFormatter.ISO_DATE.format(LocalDate.now());

// 拼接fileName

fileName = datePath + “/” + fileName;

// 如果需要上传时设置存储类型与访问权限

ObjectMetadata metadata = new ObjectMetadata();

metadata.setContentType(getContentType(fileName.substring(fileName.lastIndexOf(“.”))));

// 上传文件到OSS时需要指定包含文件后缀在内的完整路径,例如abc/efg/123.jpg。

PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, fileName, inputStream);

putObjectRequest.setMetadata(metadata);

OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

ossClient.putObject(putObjectRequest);

//文件访问路径

Date expiration = new Date(System.currentTimeMillis() + 3600L * 1000 * 24 * 365 * 100);

URL url = ossClient.generatePresignedUrl(bucketName, fileName, expiration);

// 关闭ossClient

ossClient.shutdown();

// 把上传到oss的路径返回

return url.toString();

}

/**

  • 返回contentType

  • @param FileNameExtension

  • @return

*/

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/jpg”;

}

return “image/jpg”;

}

/**

  • 列举 指定路径下所有的文件的文件名

  • 如果要列出根路径下的所有文件,path= “”

  • @param path

  • @return

*/

public static List listFileName(String path) {

List res = new ArrayList<>();

// 构造ListObjectsRequest请求。

ListObjectsRequest listObjectsRequest = new ListObjectsRequest(bucketName);

// 设置prefix参数来获取fun目录下的所有文件。

listObjectsRequest.setPrefix(path);

OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

// 列出文件。

ObjectListing listing = ossClient.listObjects(listObjectsRequest);

// 遍历所有文件

for (OSSObjectSummary objectSummary : listing.getObjectSummaries()) {

System.out.println(objectSummary.getKey());

}

// 关闭OSSClient。

ossClient.shutdown();

return res;

}

/**

  • 列举文件下所有的文件url信息

*/

public static List listFileUrl(String path) {

List res = new ArrayList<>();

// 构造ListObjectsRequest请求

ListObjectsRequest listObjectsRequest = new ListObjectsRequest(bucketName);

// 设置prefix参数来获取fun目录下的所有文件。

listObjectsRequest.setPrefix(path);

OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

// 列出文件。

ObjectListing listing = ossClient.listObjects(listObjectsRequest);

// 遍历所有文件。

for (OSSObjectSummary objectSummary : listing.getObjectSummaries()) {

//文件访问路径

Date expiration = new Date(System.currentTimeMillis() + 3600L * 1000 * 24 * 365 * 100);

URL url = ossClient.generatePresignedUrl(bucketName, objectSummary.getKey(), expiration);

res.add(url.toString());

}

// 关闭OSSClient。

ossClient.shutdown();

return res;

}

/**

  • 判断文件是否存在

  • @param objectName

  • @return

*/

public static boolean isFileExist(String objectName) {

OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

boolean res = ossClient.doesObjectExist(bucketName, objectName);

return res;

}

/**

  • 通过文件名下载文件

  • @param objectName 要下载的文件名

  • @param localFileName 本地要创建的文件名

*/

public static void downloadFile(String objectName, String localFileName) {

OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

// 下载OSS文件到本地文件。如果指定的本地文件存在会覆盖,不存在则新建。

ossClient.getObject(new GetObjectRequest(bucketName, objectName), new File(localFileName));

// 关闭OSSClient。

ossClient.shutdown();

}

/**

  • 删除文件或目录

  • @param objectName

*/

public static void delelteFile(String objectName) {

OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

ossClient.deleteObject(bucketName, objectName);

ossClient.shutdown();

}

/**

  • 批量删除文件或目录

  • @param keys

*/

public static void deleteFiles(List keys) {

OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

// 删除文件。

DeleteObjectsResult deleteObjectsResult = ossClient.deleteObjects(new DeleteObjectsRequest(bucketName).withKeys(keys));

java.util.List deletedObjects = deleteObjectsResult.getDeletedObjects();

ossClient.shutdown();

}

/**

  • 创建文件夹

  • @param folder

  • @return

*/

public static String createFolder(String folder) {

// 文件夹名

final String keySuffixWithSlash = folder;

OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

// 判断文件夹是否存在,不存在则创建

if (!ossClient.doesObjectExist(bucketName, keySuffixWithSlash)) {

// 创建文件夹

ossClient.putObject(bucketName, keySuffixWithSlash, new ByteArrayInputStream(new byte[0]));

// 得到文件夹名

OSSObject object = ossClient.getObject(bucketName, keySuffixWithSlash);

String fileDir = object.getKey();

ossClient.shutdown();

return fileDir;

}

return keySuffixWithSlash;

}

}

注意:为了避免OSS链接出现 connection pool shutdown错误,不要在类中创建了OSSClient对象 ,因为这样做的话所有方法共用此实例对象,在前端很短的时间内连续提交,造成异常错误。应该将OSSClient对象在方法中创建。

测试代码


class AliOSSUtilTest {

@Test

void upload() throws FileNotFoundException {

//上传文件

String url = AliOSSUtil.upload(“E:\图片\510.jpg”, “/aa/bb/ba.jpg”);

System.out.println(url);

}

@Test

void listFileName() {

List res = AliOSSUtil.listFileName(“aa/”);

res.forEach(System.out::println);

}

@Test

void listFileUrl() {

List res = AliOSSUtil.listFileUrl(“aa/”);

res.forEach(System.out::println);

}

@Test

void isFileExist() {

boolean res = AliOSSUtil.isFileExist(“aa/bb/ab1637160001528.jpg”);

System.out.println(res);

}

@Test

void downloadFile() {

AliOSSUtil.downloadFile(“aa/bb/ab1637160001528.jpg”, “d:/aaawer.jpg”);

}

@Test

void delelteFile() {

AliOSSUtil.delelteFile(“aa/bb/ab1637160001528.jpg”);

}

@Test

void deleteFiles() {

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值