1. 第一步:編寫OSS的工具類
點選檢視程式碼
aliyun:
oss:
keyid: 填寫自己的
keysecret: 填寫自己的
endpoint: 填寫自己的
bucketname: 填寫自己的
@Component
public class OSSUtils {
public String urlOSS(MultipartFile img){
//地域節點 --- id --- 金鑰 --- 儲存筒名稱
String endpoint = AliYunOssClient.END_POINT;
String accessKeyId = AliYunOssClient.KEY_ID;
String accessKeySecret = AliYunOssClient.KEY_SECRET;
String bucketName = AliYunOssClient.BUCKET_NAME;
try {
// 建立OSSClient例項。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
//獲取檔案上傳的輸入流
InputStream inputStream = img.getInputStream();
//獲取檔名稱
String Filename = img.getOriginalFilename();
/**
* 1.解決上傳同一檔案而被新上傳的覆蓋,使用uuid進行拼接檔名使檔名唯一
* 2.解決上傳檔案分類問題,根據時間進行分類
*/
// 將uuid 轉為string 並且把-去除
String uuid = UUID.randomUUID().toString().replaceAll("-","");
Filename = uuid + Filename;
/**
* 使用的依賴是:
* <dependency>
* <groupId>joda-time</groupId>
* <artifactId>joda-time</artifactId>
*</dependency>
* new DateTime().toString(),toString()傳入日期規則
* yyyy/MM-dd 形成 年為一個資料夾,月-日為一個資料夾
*/
org.joda.time.DateTime dateTime = new org.joda.time.DateTime();
String date = dateTime.toString("yyyy/MM/dd");
String filePath = date+"/"+Filename;
/**
* 第一個引數 bucket名字
* 第二個引數 上傳檔案到阿里雲OSS的檔案路徑和檔名稱,filePath = path + fileName
* eg:/a/b/c.jpg
* 第三個引數 是檔案輸入流
*/
ossClient.putObject(bucketName,filePath,inputStream);
//關閉ossClient
ossClient.shutdown();
String url = "https://"+bucketName+"."+endpoint+"/"+filePath;
//System.out.println("================="+url);
return url;
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
}
2. OSS的屬性
點選檢視程式碼
@Data
@Component
@ConfigurationProperties(prefix = "aliyun.oss")
public class AliYunOssClient implements InitializingBean {
private String endPoint;
private String keyId;
private String keySecret;
private String bucketName;
public static String END_POINT;
public static String KEY_ID;
public static String KEY_SECRET;
public static String BUCKET_NAME;
//在給上面屬性透過配置檔案注入值之後,定義static變數,讓外界直接用類名.的方式獲取屬性
//此方法在上面私有屬性被注入值之後,可以執行下面的方法
@Override
public void afterPropertiesSet() throws Exception {
END_POINT = endPoint;
KEY_ID = keyId;
KEY_SECRET = keySecret;
BUCKET_NAME = bucketName;
}
}
3. 上傳介面的Controller
點選檢視程式碼
/**
* @author 胡銘陽
* @ClassNameUploadController
* @Authorhmy
* @date 2023/1/2 10:17
* @description:檔案圖片上傳
*/
@CrossOrigin
@RestController
public class UploadController {
@Autowired
private OSSUtils ossUtils;
@PostMapping("/upload")
public ResponseResult uploadImg(MultipartFile img){
String s = ossUtils.urlOSS(img);
return ResponseResult.okResult(s);
}
}
4. service介面
點選檢視程式碼
/**
* @author 胡銘陽
* @ClassNameUploadService
* @Authorhmy
* @date 2023/1/2 10:19
* @description:檔案圖片上傳
*/
public interface UploadService {
/**
* 圖片上傳
* @param img:檔案
* @return
*/
ResponseResult uploadImg(MultipartFile img);
}
5. Impl實現類
點選檢視程式碼
/**
* @author 胡銘陽
* @ClassNameUploadServiceImpl
* @Authorhmy
* @date 2023/1/2 10:20
* @description
*/
@Service
public class UploadServiceImpl implements UploadService {
@Autowired
private OSSUtils ossUtils;
/**
* 圖片上傳
*
* @param img :檔案
* @return
*/
@Override
public ResponseResult uploadImg(MultipartFile img) {
String originalFilename = img.getOriginalFilename();
if (originalFilename.equals(".png")||originalFilename.equals(".jpg")||originalFilename.equals(".GIF")||originalFilename.equals(".BMP")){
throw new SystemException(AppHttpCodeEnum.FILE_TYPE_ERROR);
}
String s = ossUtils.urlOSS(img);
return ResponseResult.okResult(s);
}
}