<!--com.aliyun.oss--> <dependency> <groupId>com.aliyun.oss</groupId> <artifactId>aliyun-sdk-oss</artifactId> <version>2.8.3</version> </dependency>
//按文件类型区分目录 public enum AliOssFilePackage { audio,video,picture,other,record }
import com.aliyun.oss.ClientConfiguration; import com.aliyun.oss.OSSClient; import com.aliyun.oss.model.PutObjectResult; import com.flippedclassroom.common.enums.AliOssFilePackage; import com.flippedclassroom.common.enums.MultimediaType; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import org.springframework.web.multipart.MultipartFile; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.util.Date; import java.util.HashMap; import java.util.Map; @Component public class AliOssClient{ private static final Logger logger = LoggerFactory.getLogger(AliyunOssClient.class); private static final String endpoint = "**配置你的endpoint**"; private static final String accessKeyId = "**配置你的accessKeyId**"; private static final String accessKeySecret = "**配置你的accessKeySecret**"; private static final String bucketName = "**配置你的bucketName**"; //指定多媒体类型 public Map<String, String> uploadFile(MultipartFile file, boolean saveFile, AliOssFilePackage record, MultimediaType multimediaType) throws IOException { String fileId = ResultUtil.getUUID(); //类型 png/image String filePackage = record.name(); String fileName = file.getOriginalFilename(); String fileType = "." + multimediaType.name(); String uploadName = filePackage + "/" + fileId + fileType; Map<String, String> data = new HashMap<>(); data.put("type", filePackage); data.put("id", fileId); logger.info("文件:{},开始上传", fileName); if (upload(file.getBytes(), uploadName, data)) { return data; } return null; } //指定文件oss目录 public Map<String, String> uploadFile(MultipartFile file, boolean saveFile, AliOssFilePackage record) throws IOException { String fileId = ResultUtil.getUUID(); //类型 png/image String filePackage = record.name(); String fileName = file.getOriginalFilename(); String fileType = fileName.substring(fileName.lastIndexOf(".")); String uploadName = filePackage + "/" + fileId + fileType; Map<String, String> data = new HashMap<>(); data.put("type", filePackage); data.put("id", fileId); logger.info("文件:{},开始上传", fileName); if (upload(file.getBytes(), uploadName, data)) { return data; } return null; } //直接上传 public Map<String, String> uploadFile(MultipartFile file, boolean saveFile) throws IOException { String fileId = ResultUtil.getUUID(); //类型 png/image String contentType = file.getContentType(); String fileName = file.getOriginalFilename(); String fileType = fileName.substring(fileName.lastIndexOf(".")); String filePackage = filePackage(contentType); String uploadName = filePackage + "/" + fileId + fileType; Map<String, String> data = new HashMap<>(); data.put("type", filePackage); data.put("id", fileId); logger.info("文件:{},开始上传", fileName); if (upload(file.getBytes(), uploadName, data)) { return data; } return null; } //上传文件Byte数组 private boolean upload(byte[] bytes, String fileName, Map<String, String> data) { try { //空间名 // 创建OSSClient实例。 OSSClient ossClient = createOSSClient(); //上传byte[] PutObjectResult putObjectResult = ossClient.putObject(bucketName, fileName, new ByteArrayInputStream(bytes)); //过期时间 Date expiration = new Date(System.currentTimeMillis() + 3600L * 1000 * 24 * 365 * 100); // 生成URL URL url = ossClient.generatePresignedUrl(bucketName, fileName, expiration); logger.debug("文件地址:" + url.toString()); data.put("url", url.toString()); ossClient.shutdown(); if (putObjectResult != null) { return true; } } catch (Exception e) { logger.info("阿里云-上传Byte[]-异常"); e.printStackTrace(); } return false; } //上传网络流 private boolean upload(String url, String fileName, Map<String, String> data) { try { // 创建OSSClient实例。 OSSClient ossClient = createOSSClient(); //上传byte[] InputStream inputStream = new URL(url).openStream(); PutObjectResult putObjectResult = ossClient.putObject(bucketName, fileName, inputStream); Date expiration = new Date(System.currentTimeMillis() + 3600L * 1000 * 24 * 365 * 100); // 生成URL URL NetUrl = ossClient.generatePresignedUrl(bucketName, fileName, expiration); data.put("url", NetUrl.toString()); ossClient.shutdown(); if (putObjectResult != null) { return true; } } catch (Exception e) { logger.info("阿里云-上传网络流-异常"); e.printStackTrace(); } return false; } private OSSClient createOSSClient() { //绑定域名 ClientConfiguration conf = new ClientConfiguration(); conf.setSupportCname(true); // 创建OSSClient实例。 OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret, conf); //空间容器判断 // if (!ossClient.doesBucketExist(bucketName)) { // ossClient.createBucket(bucketName); // CreateBucketRequest bucketRequest = new CreateBucketRequest(bucketName); // bucketRequest.setCannedACL(CannedAccessControlList.PublicRead); // ossClient.createBucket(bucketRequest); // } return ossClient; } //文件包名归类 private String filePackage(String contentType) { contentType = contentType.toLowerCase(); if (contentType.contains("image")) { return AliOssFilePackage.picture.name(); } if (contentType.contains("video")) { return AliOssFilePackage.video.name(); } if (contentType.contains("audio")) { return AliOssFilePackage.audio.name(); } return AliOssFilePackage.other.name(); } private AliOssFilePackage fileType(MultipartFile file) { String contentType = file.getContentType().toLowerCase(); if (contentType.contains("image")) { return AliOssFilePackage.picture; } if (contentType.contains("video")) { return AliOssFilePackage.video; } if (contentType.contains("audio")) { return AliOssFilePackage.audio; } return AliOssFilePackage.other; } }