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.aliyuncs.DefaultAcsClient; import com.aliyuncs.IAcsClient; import com.aliyuncs.exceptions.ClientException; import com.aliyuncs.exceptions.ServerException; import com.aliyuncs.mts.model.v20140618.SubmitJobsRequest; import com.aliyuncs.mts.model.v20140618.SubmitJobsResponse; import com.aliyuncs.mts.model.v20140618.SubmitMediaInfoJobRequest; import com.aliyuncs.mts.model.v20140618.SubmitMediaInfoJobResponse; import com.aliyuncs.profile.DefaultProfile; import com.cnd3b.common.parameter.parameter; import org.apache.commons.lang.exception.ExceptionUtils; import java.io.ByteArrayInputStream; import java.io.UnsupportedEncodingException; import java.net.URL; import java.net.URLDecoder; import java.net.URLEncoder; 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"); // // } private static final String ossBucket = BUCKE_NAME_1; private static final String ossLocation = "oss-cn-hangzhou"; private static final String REGION = "cn-hangzhou"; private static final String mpsRegionId = "cn-hangzhou"; private static final String mtsEndpoint = "mts." + mpsRegionId + ".aliyuncs.com"; private static DefaultAcsClient aliyunClient; private static final String pipelineId = "3852035b69474d508167f2af72d9dce4"; private static final String accessKeyId = AccessKey_ID; private static final String accessKeySecret = AccessKey_Secret; /** * 调用本接口之后媒体处理服务会对输入文件进行媒体信息分析,返回输入文件的媒体信息。您可以通过查询媒体信息作业接口得到媒体信息分析结果。 * * @param Object * @return */ public static String submitMediaInfoJob(String Object) { JSONObject jsonObject = new JSONObject(); jsonObject.put("Bucket", ossBucket); jsonObject.put("Location", ossLocation); jsonObject.put("Object", Object); String json = jsonObject.toJSONString(); try { DefaultProfile.addEndpoint(REGION, REGION, "Mts", mtsEndpoint); } catch (ClientException e) { System.out.print(ExceptionUtils.getStackTrace(e)); System.exit(1); } aliyunClient = new DefaultAcsClient(DefaultProfile.getProfile(REGION, accessKeyId, accessKeySecret)); SubmitMediaInfoJobRequest request = new SubmitMediaInfoJobRequest(); request.setInput(json); request.setPipelineId(pipelineId); try { SubmitMediaInfoJobResponse response = aliyunClient.getAcsResponse(request); return JSONObject.toJSONString(response); } catch (ClientException e) { e.printStackTrace(); } return ""; } public static void transcoding(String TemplateId, String ossInputObject, String ossOutputObject) { // 创建DefaultAcsClient实例并初始化 DefaultProfile profile = DefaultProfile.getProfile( mpsRegionId, // 地域ID accessKeyId, // RAM账号的AccessKey ID accessKeySecret); // RAM账号Access Key Secret IAcsClient client = new DefaultAcsClient(profile); // 创建API请求并设置参数 SubmitJobsRequest request = new SubmitJobsRequest(); // Input JSONObject input = new JSONObject(); input.put("Location", ossLocation); input.put("Bucket", ossBucket); try { input.put("Object", URLEncoder.encode(ossInputObject, "utf-8")); } catch (UnsupportedEncodingException e) { throw new RuntimeException("input URL encode failed"); } request.setInput(input.toJSONString()); // Output String outputOSSObject; try { outputOSSObject = URLEncoder.encode(ossOutputObject, "utf-8"); } catch (UnsupportedEncodingException e) { throw new RuntimeException("output URL encode failed"); } JSONObject output = new JSONObject(); output.put("OutputObject", outputOSSObject); // Ouput->Container // JSONObject container = new JSONObject(); // container.put("Format", "mp4"); // output.put("Container", container.toJSONString()); // Ouput->Video // JSONObject video = new JSONObject(); // video.put("Codec", "H.264"); // video.put("Bitrate", "1500"); // video.put("Width", "1280"); // video.put("Fps", "25"); // output.put("Video", video.toJSONString()); // Ouput->Audio // JSONObject audio = new JSONObject(); // audio.put("Codec", "AAC"); // audio.put("Bitrate", "128"); // audio.put("Channels", "2"); // audio.put("Samplerate", "44100"); // output.put("Audio", audio.toJSONString()); // Ouput->TemplateId output.put("TemplateId", TemplateId); JSONArray outputs = new JSONArray(); outputs.add(output); request.setOutputs(outputs.toJSONString()); request.setOutputBucket(ossBucket); request.setOutputLocation(ossLocation); // PipelineId request.setPipelineId(pipelineId); // 发起请求并处理应答或异常 SubmitJobsResponse response; try { response = client.getAcsResponse(request); System.out.println("RequestId is:" + response.getRequestId()); if (response.getJobResultList().get(0).getSuccess()) { System.out.println("JobId is:" + response.getJobResultList().get(0).getJob().getJobId()); } else { System.out.println("SubmitJobs Failed code:" + response.getJobResultList().get(0).getCode() + " message:" + response.getJobResultList().get(0).getMessage()); } } catch (ServerException e) { e.printStackTrace(); } catch (ClientException e) { e.printStackTrace(); } } public static List getOssFileList(String folderPath) { OSS client = new OSSClientBuilder().build(END_POINT, AccessKey_ID, AccessKey_Secret); // 构造ListObjectsRequest请求。 ListObjectsRequest listObjectsRequest = new ListObjectsRequest(BUCKE_NAME_1); // 设置prefix参数来获取fun目录下的所有文件。 listObjectsRequest.setPrefix(folderPath); // 递归列举目录下的所有文件。 ObjectListing listing = client.listObjects(listObjectsRequest); // 遍历所有文件。 List keysList = new ArrayList<>(); for (OSSObjectSummary objectSummary : listing.getObjectSummaries()) { if (!objectSummary.getKey().endsWith("/")) { String key = objectSummary.getKey(); // System.err.println(key); keysList.add(key); } } client.shutdown(); return keysList; } }