123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200 |
- package com.caimei.modules.archive.utils;
- import com.aliyun.oss.OSS;
- import com.aliyun.oss.OSSClientBuilder;
- import com.aliyun.oss.model.CannedAccessControlList;
- import com.aliyun.oss.model.GetObjectRequest;
- import com.aliyun.oss.model.ObjectMetadata;
- import com.aliyun.oss.model.UploadFileRequest;
- import com.caimei.utils.StringUtils;
- import com.thinkgem.jeesite.common.config.Global;
- import org.springframework.web.multipart.MultipartFile;
- import java.io.File;
- import java.io.IOException;
- import java.util.Date;
- import java.util.UUID;
- public class OssArchiveUtil {
- private static String endpoint = Global.getConfig("aliyun.endpoint");
- private static String accessKeyId = Global.getConfig("aliyun.accessKeyId");
- private static String accessKeySecret = Global.getConfig("aliyun.accessKeySecret");
- private static String privateBucket = Global.getConfig("aliyun.bucketName");
- private static String config = Global.getConfig("cm.config");
- public static String ossUpload(String fileName, String path, File file, String contentType, String contentDisposition) {
- String url = null;
- try {
- if ("product".equals(config)) {
- fileName = "prod/" + path + fileName;
- } else {
- fileName = config + "/" + path + fileName;
- }
- OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
- ObjectMetadata meta = new ObjectMetadata();
- meta.setContentType(contentType);
- meta.setObjectAcl(CannedAccessControlList.PublicRead);
- meta.setContentDisposition(StringUtils.isEmpty(contentDisposition) ? "inline" : contentDisposition);
- 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();
- // 关闭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";
- }
- 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 path, String fileName) {
- OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
- // 设置URL过期时间为1个小时
- Date expiration = new Date(System.currentTimeMillis() + 3600L * 1000);
- if ("product".equals(config)) {
- fileName = "prod/" + path + fileName;
- } else {
- fileName = config + "/" + path + fileName;
- }
- String url = ossClient.generatePresignedUrl(privateBucket, fileName, expiration).toString();
- // 关闭OSSClient。
- ossClient.shutdown();
- return url;
- }
- /**
- * oss单个文件删除
- *
- * @param fileName 文件名称或文件夹名称
- */
- public static void deleteSingleFile(String path, String fileName) {
- // 创建OSSClient实例。
- OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
- // 删除文件。如需删除文件夹,请将ObjectName设置为对应的文件夹名称。
- // 如果文件夹非空,则需要将文件夹下的所有object删除后才能删除该文件夹。
- if ("product".equals(config)) {
- fileName = "prod/" + path + fileName;
- } else {
- fileName = config + "/" + path + fileName;
- }
- ossClient.deleteObject(privateBucket, 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文件到本地文件。如果指定的本地文件存在会覆盖,不存在则新建。
- if ("product".equals(config)) {
- ossName = "prod/" + path + ossName;
- } else {
- ossName = config + "/" + path + ossName;
- }
- ossClient.getObject(new GetObjectRequest(privateBucket, ossName), new File("./" + fileName));
- // 关闭OSSClient。
- ossClient.shutdown();
- }
- }
|