123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270 |
- package com.caimei.utils;
- 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.auth.sts.AssumeRoleRequest;
- import com.aliyuncs.auth.sts.AssumeRoleResponse;
- import com.aliyuncs.exceptions.ClientException;
- import com.aliyuncs.profile.DefaultProfile;
- import org.apache.commons.lang3.StringUtils;
- import org.springframework.beans.factory.annotation.Value;
- import org.springframework.stereotype.Component;
- import org.springframework.web.multipart.MultipartFile;
- import java.io.File;
- import java.io.IOException;
- import java.net.URL;
- import java.util.Date;
- import java.util.HashMap;
- import java.util.UUID;
- @Component
- public class OSSUtils {
- private static String endpoint;
- @Value("${aliyunConfig.endpoint}")
- public void setEndpoint(String endpoints) {
- endpoint = endpoints;
- }
- private static String accessKeyId;
- @Value("${aliyunConfig.accessKeyId}")
- public void setAccessKeyId(String accessKeyIds) {
- accessKeyId = accessKeyIds;
- }
- private static String accessKeySecret;
- @Value("${aliyunConfig.accessKeySecret}")
- public void setAccessKeySecret(String accessKeySecrets) {
- accessKeySecret = accessKeySecrets;
- }
- private static String privateBucket;
- @Value("${aliyunConfig.bucketName}")
- public void setPrivateBucket(String bucketName) {
- privateBucket = bucketName;
- }
- private static String active;
- @Value("${spring.profiles.active}")
- public void setActive(String actives) {
- active = actives;
- }
- public static HashMap<String, String> getToken() {
- //构建一个阿里云客户端,用于发起请求。
- //设置调用者(RAM用户或RAM角色)的AccessKey ID和AccessKey Secret。
- DefaultProfile profile = DefaultProfile.getProfile("oss-cn-shenzhen", accessKeyId, accessKeySecret);
- IAcsClient client = new DefaultAcsClient(profile);
- //构造请求,设置参数。
- AssumeRoleRequest request = new AssumeRoleRequest();
- request.setRegionId(endpoint);
- request.setRoleArn("acs:ram::1565565840178476:role/caimeitst");
- request.setRoleSessionName("TSTtest");
- AssumeRoleResponse response = null;
- try {
- response = client.getAcsResponse(request);
- } catch (ClientException e) {
- e.printStackTrace();
- }
- String requestId = response.getRequestId();
- String securityToken = response.getCredentials().getSecurityToken();
- String accessKeySecret = response.getCredentials().getAccessKeySecret();
- String accessKeyId = response.getCredentials().getAccessKeyId();
- HashMap<String, String> tokenMap = new HashMap<>(5);
- tokenMap.put("requestId", requestId);
- tokenMap.put("accessKeyId", accessKeyId);
- tokenMap.put("accessKeySecret", accessKeySecret);
- tokenMap.put("securityToken", securityToken);
- tokenMap.put("bucket", privateBucket);
- return tokenMap;
- }
- public static String ossUpload(String fileName, File file, String contentType, String contentDisposition) {
- String url = null;
- try {
- OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
- ObjectMetadata meta = new ObjectMetadata();
- meta.setObjectAcl(CannedAccessControlList.PublicRead);
- meta.setContentType(contentType);
- // 设置
- if (StringUtils.isNotEmpty(contentDisposition)) {
- meta.setContentDisposition(contentDisposition);
- }
- fileName = active + "/authFile/" + fileName;
- UploadFileRequest uploadFileRequest = new UploadFileRequest(privateBucket, fileName);
- // 指定上传的本地文件。
- uploadFileRequest.setUploadFile(file.toString());
- // 指定上传并发线程数,默认为1。
- uploadFileRequest.setTaskNum(10);
- // 指定上传的分片大小,范围为100KB~5GB,默认为文件大小/10000。
- uploadFileRequest.setPartSize(1024 * 1024);
- // 开启断点续传,默认关闭。
- uploadFileRequest.setEnableCheckpoint(true);
- uploadFileRequest.setCheckpointFile(file.getAbsolutePath() + "uploadFile.ucp");
- // 文件的元数据。
- uploadFileRequest.setObjectMetadata(meta);
- // 设置上传成功回调,参数为Callback类型。
- //uploadFileRequest.setCallback("<yourCallbackEvent>");
- // 断点续传上传。
- ossClient.uploadFile(uploadFileRequest);
- // 有效期100年
- Date expiration = new Date(System.currentTimeMillis() + 60L * 60 * 24 * 365 * 100 * 1000);
- url = ossClient.generatePresignedUrl(privateBucket, fileName, expiration).toString();
- /*GeneratePresignedUrlRequest request =
- new GeneratePresignedUrlRequest(privateBucket, fileName, HttpMethod.PUT);//设置为这个URL只支持PUT操作
- request.setExpiration(expiration);
- request.setContentType("application/octet-stream");
- url = ossClient.generatePresignedUrl(request).toString();*/
- // 关闭OSSClient。
- ossClient.shutdown();
- } catch (Throwable e) {
- e.printStackTrace();
- }
- return url;
- }
- /**
- * 通过文件名判断并获取OSS服务文件上传时文件的contentType
- */
- public static String getContentType(String fileName) {
- String fileExtension = fileName.substring(fileName.lastIndexOf("."));
- if (".bmp".equalsIgnoreCase(fileExtension)) {
- return "image/bmp";
- }
- if (".gif".equalsIgnoreCase(fileExtension)) {
- return "image/gif";
- }
- if (".jpeg".equalsIgnoreCase(fileExtension)) {
- return "image/jpeg";
- }
- if (".jpg".equalsIgnoreCase(fileExtension)) {
- return "image/jpg";
- }
- if (".png".equalsIgnoreCase(fileExtension)) {
- return "image/png";
- }
- if (".html".equalsIgnoreCase(fileExtension)) {
- return "text/html";
- }
- if (".txt".equalsIgnoreCase(fileExtension)) {
- return "text/plain";
- }
- if (".vsd".equalsIgnoreCase(fileExtension)) {
- return "application/vnd.visio";
- }
- if (".ppt".equalsIgnoreCase(fileExtension)) {
- return "application/vnd.ms-powerpoint";
- }
- if (".pptx".equalsIgnoreCase(fileExtension)) {
- return "application/vnd.openxmlformats-officedocument.presentationml.presentation";
- }
- if (".doc".equalsIgnoreCase(fileExtension)) {
- return "application/msword";
- }
- if (".docx".equalsIgnoreCase(fileExtension)) {
- return "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
- }
- if (".xml".equalsIgnoreCase(fileExtension)) {
- return "text/xml";
- }
- if (".mp4".equalsIgnoreCase(fileExtension)) {
- return "video/mp4";
- }
- if (".mp3".equalsIgnoreCase(fileExtension)) {
- return "audio/mp3";
- }
- if (".pdf".equalsIgnoreCase(fileExtension)) {
- return "application/pdf";
- }
- if (".zip".equalsIgnoreCase(fileExtension)) {
- return "application/zip";
- }
- return "text/html";
- }
- public static void deleteFile(File... files) {
- for (File file : files) {
- //logger.info("File:[{}]",file.getAbsolutePath());
- if (file.exists()) {
- file.delete();
- }
- }
- }
- public static File ossUpload(MultipartFile file) throws IOException {
- // 获取文件名
- String fileName = file.getOriginalFilename();
- // 获取文件后缀
- String prefix = fileName.substring(fileName.lastIndexOf("."));
- // 用uuid作为文件名,防止生成的临时文件重复
- File excelFile = File.createTempFile(UUID.randomUUID().toString(), prefix);
- // MultipartFile to File
- file.transferTo(excelFile);
- //程序结束时,删除临时文件
- return excelFile;
- }
- /**
- * 授权生成签名URL临时访问
- *
- * @param fileName 文件名称
- */
- public static String getOssUrl(String fileName) {
- OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
- // 设置URL过期时间为1个小时
- Date expiration = new Date(System.currentTimeMillis() + 3600L * 1000);
- String url = ossClient.generatePresignedUrl(privateBucket, active + "/authFile/" + fileName, expiration).toString();
- // 关闭OSSClient。
- ossClient.shutdown();
- return url;
- }
- /**
- * oss单个文件删除
- *
- * @param fileName 文件名称或文件夹名称
- */
- public static void deleteSingleFile(String fileName) {
- // 创建OSSClient实例。
- OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
- // 删除文件。如需删除文件夹,请将ObjectName设置为对应的文件夹名称。
- // 如果文件夹非空,则需要将文件夹下的所有object删除后才能删除该文件夹。
- ossClient.deleteObject(privateBucket, active + "/authFile/" + fileName);
- // 关闭OSSClient。
- ossClient.shutdown();
- }
- /**
- * oss单个文件下载
- */
- public static void downFile(String path, String ossName, String fileName) {
- // 创建OSSClient实例。
- OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
- // 下载OSS文件到本地文件。如果指定的本地文件存在会覆盖,不存在则新建。
- String filePath = active + "/" + path + ossName;
- ossClient.getObject(new GetObjectRequest(privateBucket, filePath), new File("./" + fileName));
- // 关闭OSSClient。
- ossClient.shutdown();
- }
- public static void downFileByFilePath(String path, String ossName, String fileName) {
- // 创建OSSClient实例。
- OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
- // 下载OSS文件到本地文件。如果指定的本地文件存在会覆盖,不存在则新建。
- String filePath = active + "/" + path + ossName;
- ossClient.getObject(new GetObjectRequest(privateBucket, filePath), new File(fileName));
- // 关闭OSSClient。
- ossClient.shutdown();
- }
- }
|