package com.ruoyi.common.utils;
|
|
import com.aliyun.oss.OSS;
|
import com.aliyun.oss.model.PutObjectRequest;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.stereotype.Service;
|
import org.springframework.web.multipart.MultipartFile;
|
|
import java.io.IOException;
|
import java.util.UUID;
|
|
@Service
|
public class OssService {
|
|
@Autowired
|
private OSS ossClient;
|
|
@Value("${aliyun.oss.bucket-name}")
|
private String bucketName;
|
|
@Value("${aliyun.oss.domain}")
|
private String domain;
|
|
/**
|
* 上传文件到OSS
|
* @param file 上传的文件
|
* @param directory 存储目录
|
* @return 文件访问URL
|
*/
|
public String uploadFile(MultipartFile file, String directory) {
|
if (file == null || file.isEmpty()) {
|
return null;
|
}
|
|
try {
|
// 生成唯一文件名,避免重复
|
String originalFilename = file.getOriginalFilename();
|
String fileExtension = originalFilename.substring(originalFilename.lastIndexOf("."));
|
String fileName = UUID.randomUUID().toString() + fileExtension;
|
|
// 构建完整路径:目录/文件名
|
String objectName = directory + "/" + fileName;
|
|
// 上传文件
|
ossClient.putObject(new PutObjectRequest(bucketName, objectName, file.getInputStream()));
|
|
// 返回文件URL
|
return "https://" + domain + "/" + objectName;
|
} catch (IOException e) {
|
e.printStackTrace();
|
throw new RuntimeException("文件上传失败");
|
} finally {
|
// 关闭OSSClient
|
// ossClient.shutdown();
|
}
|
}
|
|
/**
|
* 从OSS删除文件
|
* @param objectName 文件路径
|
*/
|
public void deleteFile(String objectName) {
|
try {
|
ossClient.deleteObject(bucketName, objectName);
|
} catch (Exception e) {
|
e.printStackTrace();
|
throw new RuntimeException("文件删除失败");
|
} finally {
|
// ossClient.shutdown();
|
}
|
}
|
}
|