复制粘贴直接用~代码递归删除阿里云云存储bucket中的所有文件

今天的工作是迁移阿里云oss中的数据,由于前缀名的问题,如果要修改所有数据库中多个表中的已保存的url的话太繁琐,bucket的名字是全网唯一的,先在新服务器上随便创建一个buctket,将老服务器中的数据迁移过去后只有删除老服务器中的bucket才能在新服务器上创建同名的bucket,参照官网给的api文档,稍微修改下就实现下面的删除功能啦~(ps:删除bucket后阿里云会有一段时间的延迟,大概10分钟左右才能新创建同名的bucket哦,提交工单问了售后他也不大清楚,只能自己踩坑踩坑…)

我的项目是maven管理的,使用maven依赖:

<dependency>
   <groupId>com.aliyun.oss</groupId>
   <artifactId>aliyun-sdk-oss</artifactId>
   <version>${aliyun.oss.version}</version>
</dependency>
OSSUtils工具类:
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

import com.aliyun.oss.OSSClient;
import com.aliyun.oss.model.OSSObject;
import com.aliyun.oss.model.OSSObjectSummary;
import com.aliyun.oss.model.ObjectListing;

public class OSSUtil {

    /**
     *
     * @Title: getOSSClient
     * @Description: 获取oss客户端
     * @return OSSClient oss客户端
     * @throws
     */
    public static OSSClient getOSSClient() {
        //公司新服务器
        String endpoint = "http://oss-cn-beijing.aliyuncs.com";
        // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录https://ram.console.aliyun.com 创建RAM账号。
        String accessKeyId = "xxxxxxxxxxxx";
        String accessKeySecret = "xxxxxxxxxxxxxxxxxxxxx";
        OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
        return ossClient;
    }

    /**
     *
     * @Title: uploadByNetworkStream
     * @Description: 通过网络流上传文件
     * @param ossClient    oss客户端
     * @param url        URL
     * @param bucketName   bucket名称
     * @param objectName   上传文件目录和(包括文件名)例如“test/index.html”
     * @return void       返回类型
     * @throws
     */
    public static void uploadByNetworkStream(OSSClient ossClient, URL url, String bucketName, String objectName) {
        try {
            InputStream inputStream = url.openStream();
            ossClient.putObject(bucketName, objectName, inputStream);
            ossClient.shutdown();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }

    /**
     *
     * @Title: uploadByInputStream
     * @Description: 通过输入流上传文件
     * @param ossClient    oss客户端
     * @param inputStream  输入流
     * @param bucketName   bucket名称
     * @param objectName   上传文件目录和(包括文件名) 例如“test/a.jpg”
     * @return void       返回类型
     * @throws
     */
    public static void uploadByInputStream(OSSClient ossClient, InputStream inputStream, String bucketName,
                                           String objectName) {
        try {
            ossClient.putObject(bucketName, objectName, inputStream);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }

    /**
     *
     * @Title: uploadByFile
     * @Description: 通过file上传文件
     * @param ossClient    oss客户端
     * @param file           上传的文件
     * @param bucketName   bucket名称
     * @param objectName   上传文件目录和(包括文件名) 例如“test/a.jpg”
     * @return void       返回类型
     * @throws
     */
    public static void uploadByFile(OSSClient ossClient, File file, String bucketName, String objectName) {
        try {
            ossClient.putObject(bucketName, objectName, file);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }


    /**
     *
     * @Title: deleteFile
     * @Description: 根据key删除oss服务器上的文件
     * @param ossClient       oss客户端
     * @param bucketName      bucket名称
     * @param key         文件路径/名称,例如“test/a.txt”
     * @return void           返回类型
     * @throws
     */
    public static void deleteFile(OSSClient ossClient, String bucketName, String key) {
        ossClient.deleteObject(bucketName, key);
    }

    /**
     *
     * @Title: getInputStreamByOSS
     * @Description:根据key获取服务器上的文件的输入流
     * @param ossClient    oss客户端
     * @param bucketName   bucket名称
     * @param key        文件路径和名称
     * @return InputStream     文件输入流
     * @throws
     */
    public static InputStream getInputStreamByOSS(OSSClient ossClient, String bucketName, String key) {
        InputStream content = null;
        try {
            OSSObject ossObj = ossClient.getObject(bucketName, key);
            content = ossObj.getObjectContent();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return content;
    }

    /**
     *
     * @Title: queryAllObject
     * @Description: 查询某个bucket里面的所有文件
     * @param ossClient       oss客户端
     * @param bucketName      bucket名称
     * @return List<String>  文件路径和大小集合
     * @throws
     */
    public static List<String> queryAllObject(OSSClient ossClient, String bucketName) {
        List<String> results = new ArrayList<String>();
        try {
            // ossClient.listObjects返回ObjectListing实例,包含此次listObject请求的返回结果。
            ObjectListing objectListing = ossClient.listObjects(bucketName);
            // objectListing.getObjectSummaries获取所有文件的描述信息。
            for (OSSObjectSummary objectSummary : objectListing.getObjectSummaries()) {
                results.add(" - " + objectSummary.getKey() + "  " + "(size = " + objectSummary.getSize() + ")");
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
        return results;
    }
}

controller逻辑代码:

import com.aliyun.oss.OSS;
import io.renren.common.utils.OSSUtils;
import com.aliyun.oss.OSSClient;
import com.aliyun.oss.model.ListObjectsRequest;
import com.aliyun.oss.model.OSSObjectSummary;
import com.aliyun.oss.model.ObjectListing;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.List;

public class delAliyunBucketObject {
    public static int count ;
    public static void main(String[] args) {
        try {
            while (delBucketObject()){
                System.out.println("共删除文件数量::::::::"+count);
            }
        }catch (NullPointerException n){
            System.out.println("出现空指针了!!!!!!!!!!!!");
            n.printStackTrace();
        }
    }

    public static boolean delBucketObject(){
        String endpoint = "http://oss-cn-beijing.aliyuncs.com";
// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
        String accessKeyId = "xxxxxxxxxxxxx";
        String accessKeySecret = "xxxxxxxxxxxxxxxxxxxxx";
        String bucketName = "xxxxx";

// 创建OSSClient实例。(endpoint, accessKeyId, accessKeySecret)
        OSS ossClient = OSSUtils.getOSSClient();

// 构造ListObjectsRequest请求。
        ListObjectsRequest listObjectsRequest = new ListObjectsRequest(bucketName);

// 列出文件。
        ObjectListing listing = ossClient.listObjects(listObjectsRequest);
        List<OSSObjectSummary> list = listing.getObjectSummaries();
        List<String> keysList = new ArrayList<>();
        // 遍历所有commonPrefix。
        System.out.println("CommonPrefixes:");
        for (String commonPrefix : listing.getCommonPrefixes()) {
            System.out.println(commonPrefix);
        }

// 遍历所有文件。
        System.out.println("Objects:");
        if(list.size()>0){
            for (OSSObjectSummary objectSummary : list) {
                //删除
                ossClient.deleteObject(bucketName,objectSummary.getKey());
                count++;
            }
        }else{
            System.out.println("删除没了");
            return false;
        }

// 关闭OSSClient。
        ossClient.shutdown();
        return true;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值