阿里雲oss
阿里雲對象存儲服務(Object Storage Service,簡稱OSS),是阿里雲對外提供的海量、安全、低成本、高可靠的雲存儲服務。您可以通過本文檔提供的簡單的REST接口,在任何時間、任何地點、任何互聯網設備上進行上傳和下載數據。基於OSS,您可以搭建出各種多媒體分享網站、網盤、個人和企業數據備份等基於大規模數據的服務。
購買
這里就不用多說了上鏈接直接 https://www.aliyun.com/product/oss?spm=5176.19720258.J_2686872250.2.5e052c4aqm9WSD
購買開通 控制台https://oss.console.aliyun.com/overview
開通后進入阿里雲oss 控制台

創建一個Bucket 然后進入AccessKey 創建一個AccessKey 並記錄號他的AccessKey ID和secret

編寫Java代碼
1. 導入依賴
<!--阿里雲oss--> <dependency> <groupId>com.aliyun.oss</groupId> <artifactId>aliyun-sdk-oss</artifactId> <version>3.8.0</version> </dependency>
2.配置(yml)
aliyun:
oss:
file:
keyid: 這里就是Accesskey下的兩個值
keysecret:
bucketname: 這里是創建Bucket的名字和外網的地域節點
endpoint: oss-cn-xxxx.aliyuncs.com
3.編寫工具類
@Component @PropertySource("classpath:application.yml") public class OssProperies implements InitializingBean { @Value("${aliyun.oss.file.endpoint}") private String endpoint; @Value("${aliyun.oss.file.keyid}") private String keyId; @Value("${aliyun.oss.file.keysecret}") private String keysecret; @Value("${aliyun.oss.file.bucketname}") private String bucketname;
public static String END_POINT; public static String ACCESS_KEY_ID; public static String ACCESS_KEY_SECRET; public static String BUCKET_NAME; @Override public void afterPropertiesSet() throws Exception { END_POINT = endpoint; ACCESS_KEY_ID = keyId; ACCESS_KEY_SECRET = keysecret; BUCKET_NAME = bucketname; } }
4.Service
public interface OssService {
String uploadFile (MultipartFile file) throws Exception;
}
5.ServiceImpl
@Service
public class OssServiceImpl implements OssService {
@Override
public String uploadFile(MultipartFile file) throws Exception {
//讀取工具類的數據
String endpoint = OssProperies.END_POINT;
String accessKeyId = OssProperies.ACCESS_KEY_ID;
String accessKeySecret = OssProperies.ACCESS_KEY_SECRET;
String bucketName = OssProperies.BUCKET_NAME;
//連接oss客戶端
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
// 上傳文件流
InputStream inputStream = file.getInputStream();
//這里最好對文件路徑或名字做一下處理,防止文件名或路徑重復導致文件丟失或者被覆蓋
String url ="xxx/xxx/"+file.getOriginalFilename();
//上傳
ossClient.putObject(bucketName, url, inputStream);
// 關閉OSSClient。
ossClient.shutdown();
return "https://"+bucketName+"."+endpoint+"/"+url;
}
}
6.文件名路徑防止重復的幾種方式
a.日期時間,可以將以下值合理的拼接到路徑或者文件名上
Calendar c = Calendar.getInstance();
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH);
int date = c.get(Calendar.DATE);
int hour = c.get(Calendar.HOUR_OF_DAY);
int minute = c.get(Calendar.MINUTE);
int second = c.get(Calendar.SECOND);
b.通過隨機數拼接文件名
UUID.randomUUID().toString()+"_"+fileName;
其他方法自行摸索,只要你的小腦袋還能動,你一定可以想到更好的方法。
