阿里OSS工具类,字节跳动面试必问

  • 如果要列出根路径下的所有文件,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

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
img

最后

前15.PNG

前16.PNG

由于文档内容过多,为了避免影响到大家的阅读体验,在此只以截图展示部分内容

CodeChina开源项目:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

端开发知识点,真正体系化!**

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
[外链图片转存中…(img-NcYWXpEb-1711883234620)]

最后

[外链图片转存中…(img-ahg82gMv-1711883234621)]

[外链图片转存中…(img-RaMGshDK-1711883234621)]

由于文档内容过多,为了避免影响到大家的阅读体验,在此只以截图展示部分内容

CodeChina开源项目:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值