package com.cnd3b.utility.aliyun.oss; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.aliyun.oss.HttpMethod; import com.aliyun.oss.OSS; import com.aliyun.oss.OSSClientBuilder; import com.aliyun.oss.model.*; import com.cnd3b.common.parameter.parameter; import java.io.ByteArrayInputStream; import java.io.UnsupportedEncodingException; import java.net.URL; import java.net.URLDecoder; import java.sql.Date; import java.util.ArrayList; import java.util.Base64; import java.util.List; public class AliyunOSSUtil { //仓库名称-培训学习 // public static final String BUCKE_NAME_1 = "jssx"; //仓库名称-培训学习测试用 public static final String BUCKE_NAME_1 = parameter.oss_bucke_name(); //地域节点 public static final String END_POINT = "oss-cn-hangzhou.aliyuncs.com"; //AccessKey ID 阿里云AccessKey public static final String AccessKey_ID = "LTAI5t5mBLk8DbrVNZuQFPCP"; //Access Key Secret 阿里云Secret public static final String AccessKey_Secret = "KWZjSffg8LuVMXWYP7LMeV4qCGm9x0"; //外网访问 public static final String file_url = BUCKE_NAME_1 + "." + END_POINT; /** * 创建文件夹,路径以反斜杠结尾:test/ * * @return */ public static void createFolder(String filePath) { OSS ossClient = new OSSClientBuilder().build(END_POINT, AccessKey_ID, AccessKey_Secret); ossClient.putObject(new PutObjectRequest(BUCKE_NAME_1, filePath, new ByteArrayInputStream("".getBytes()))); ossClient.shutdown(); } /** * 删除文件夹(OSS) * * @return */ public static void deleteFolders(JSONArray jsonArray) { OSS ossClient = new OSSClientBuilder().build(END_POINT, AccessKey_ID, AccessKey_Secret); ArrayList keysList = new ArrayList<>(); for (Object obj : jsonArray) { keysList.add(obj.toString()); } DeleteObjectsRequest request = new DeleteObjectsRequest(BUCKE_NAME_1); request.setKeys(keysList); // 发起deleteObjects请求。 DeleteObjectsResult delObjResult = ossClient.deleteObjects(request); // 查看删除结果。 for (String o : delObjResult.getDeletedObjects()) { String keyName = null; try { keyName = URLDecoder.decode(o, "UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } System.out.println("delete key name: " + keyName); } ossClient.shutdown(); } /** * 上传文件 * * @param folderPath 上传路径 :test/ * @param filename 文件名称 :1.txt * @param base64Str base64字符串 * @return */ public static String uploadFile(String folderPath, String filename, String base64Str) { byte[] byteStr = Base64.getDecoder().decode(base64Str); OSS ossClient = new OSSClientBuilder().build(END_POINT, AccessKey_ID, AccessKey_Secret); String key = folderPath + filename; ossClient.putObject(new PutObjectRequest(BUCKE_NAME_1, key, new ByteArrayInputStream(byteStr))); ossClient.shutdown(); return file_url + "/" + key; } /** * 删除文件(OSS) * * @return */ public static void deleteFiles(JSONArray jsonArray) { OSS ossClient = new OSSClientBuilder().build(END_POINT, AccessKey_ID, AccessKey_Secret); List keysList = new ArrayList<>(); for (Object obj : jsonArray) { keysList.add(obj.toString()); } DeleteObjectsRequest request = new DeleteObjectsRequest(BUCKE_NAME_1); request.setKeys(keysList); // 发起deleteObjects请求。 DeleteObjectsResult delObjResult = ossClient.deleteObjects(request); // 查看删除结果。 for (String o : delObjResult.getDeletedObjects()) { String keyName = null; try { keyName = URLDecoder.decode(o, "UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } System.out.println("delete key name: " + keyName); } ossClient.shutdown(); } /** * 获取下级目录 filepath * * @return */ public static String getFolders(String filepath) { OSS ossClient = new OSSClientBuilder().build(END_POINT, AccessKey_ID, AccessKey_Secret); // 构造ListObjectsRequest请求。 ListObjectsRequest listObjectsRequest = new ListObjectsRequest(BUCKE_NAME_1); // 设置正斜线(/)为文件夹的分隔符。 listObjectsRequest.setDelimiter("/"); // 列出fun目录下的所有文件和文件夹。 listObjectsRequest.setPrefix(filepath); ObjectListing listing = ossClient.listObjects(listObjectsRequest); // 遍历所有commonPrefix。 ArrayList commonPrefixList = new ArrayList<>(); for (String commonPrefix : listing.getCommonPrefixes()) { commonPrefixList.add(commonPrefix); } // 关闭OSSClient。 ossClient.shutdown(); JSONObject object = new JSONObject(); object.put("folder", commonPrefixList); return object.toJSONString(); } /** * 获取所有文件夹 * * @return */ public static String getAllFolders() { OSS ossClient = new OSSClientBuilder().build(END_POINT, AccessKey_ID, AccessKey_Secret); // 构造ListObjectsRequest请求。 ListObjectsRequest listObjectsRequest = new ListObjectsRequest(BUCKE_NAME_1); // 列举文件。 ObjectListing listing = ossClient.listObjects(listObjectsRequest); //遍历所有文件。 ArrayList commonPrefixList = new ArrayList<>(); for (OSSObjectSummary objectSummary : listing.getObjectSummaries()) { // System.out.println(objectSummary.getKey()); if (objectSummary.getKey().endsWith("/")) { String key = objectSummary.getKey(); commonPrefixList.add(key); } } JSONObject object = new JSONObject(); object.put("folder", commonPrefixList); // 关闭OSSClient。 ossClient.shutdown(); return object.toJSONString(); } /** * 获取指定目录下的文件和文件夹 * * @return */ public static String getFilesOfPath(String folderPath) { OSS ossClient = new OSSClientBuilder().build(END_POINT, AccessKey_ID, AccessKey_Secret); // 构造ListObjectsRequest请求。 ListObjectsRequest listObjectsRequest = new ListObjectsRequest(BUCKE_NAME_1); // 设置正斜线(/)为文件夹的分隔符。 listObjectsRequest.setDelimiter("/"); // 列出fun目录下的所有文件和文件夹。 listObjectsRequest.setPrefix(folderPath); ObjectListing listing = ossClient.listObjects(listObjectsRequest); // 遍历所有文件。 List objectSummaryList = new ArrayList<>(); for (OSSObjectSummary objectSummary : listing.getObjectSummaries()) { if (!objectSummary.getKey().equals(folderPath)) { JSONObject object = new JSONObject(); object.put("key", objectSummary.getKey()); object.put("name", objectSummary.getKey().replace(folderPath, "")); object.put("size", objectSummary.getSize() / 1024); object.put("time", objectSummary.getLastModified()); object.put("url", file_url + "/" + objectSummary.getKey()); objectSummaryList.add(object); } } // 遍历所有commonPrefix。 List commonPrefixList = new ArrayList<>(); for (String commonPrefix : listing.getCommonPrefixes()) { JSONObject object = new JSONObject(); object.put("folderpath", commonPrefix); commonPrefixList.add(object); } // 关闭OSSClient。 ossClient.shutdown(); JSONObject object = new JSONObject(); object.put("files", objectSummaryList); object.put("folder", commonPrefixList); return object.toJSONString(); } /** * 获取oss文档预览url 60分钟,需要开通【智能媒体管理 IMM】并在oss下面配置 * * @return */ public static String getOssPreviewUrl(String key) { OSS ossClient = new OSSClientBuilder().build(END_POINT, AccessKey_ID, AccessKey_Secret); // 填写请求预览的文档完整路径,完整路径中不包含Bucket名称。 // 设置样式,样式中包含文档预览参数。 String style = "imm/previewdoc,copy_1"; // 指定生成的签名URL过期时间,最大值为15分钟。本示例指定生成的签名URL过期时间为10分钟。 Date expiration = new Date(System.currentTimeMillis() + 1000 * 60 * 60); GeneratePresignedUrlRequest req = new GeneratePresignedUrlRequest(BUCKE_NAME_1, key, HttpMethod.GET); req.setExpiration(expiration); req.setProcess(style); URL signedUrl = ossClient.generatePresignedUrl(req); System.out.println(signedUrl); // 关闭OSSClient。 ossClient.shutdown(); JSONObject object = new JSONObject(); object.put("url", signedUrl.toString()); return object.toJSONString(); } public static void main(String[] args) { //创建文件夹 AliyunOSSUtil.createFolder("test1/"); AliyunOSSUtil.createFolder("test2/"); //批量删除文价夹 JSONArray jsonArray = new JSONArray(); jsonArray.add("test1/"); jsonArray.add("test2/"); AliyunOSSUtil.deleteFolders(jsonArray); // //上传文件 AliyunOSSUtil.uploadFile("", "1.txt", ""); AliyunOSSUtil.uploadFile("test2/", "1.txt", ""); //批量删除文价夹 JSONArray jsonArray2 = new JSONArray(); jsonArray2.add("test1/1.txt"); jsonArray2.add("test2/1.txt"); AliyunOSSUtil.deleteFiles(jsonArray2); //获取下级目录 getFolders(""); //获取所有目录 getAllFolders(); //获取指定目录下的文件和文件夹 getFilesOfPath("资料中心/"); //获取oss文档预览url 60分钟,需要开通【智能媒体管理 IMM】并在oss下面配置 getOssPreviewUrl("1.tx"); } }