通過(guò)阿里云oss進(jìn)行文件上傳,首先需要開(kāi)通相關(guān)的服務(wù),這邊就不在具體說(shuō)明,不懂的可以百度看一下。
阿里云oss有幾個(gè)關(guān)鍵的參數(shù),這也是后續(xù)通過(guò)java進(jìn)行上傳所需要的參數(shù),分別是endpoint(域結(jié)點(diǎn))、AccessKey ID(秘鑰id)、AccessKey secret(秘鑰)、bucket name(bucket域名)。
?通過(guò)這幾個(gè)關(guān)鍵字段才能過(guò)連接上阿里云的oss,可以通過(guò)配置文件來(lái)進(jìn)行連接,具體配置如下:
pom:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>demooss</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demooss</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.1.0</version>
</dependency>
<!--日期時(shí)間工具-->
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.10.1</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.7.0</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.7.0</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
<scope>compile</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
# 服務(wù)端口
server.port=8888
# 環(huán)境設(shè)置:dev、test、prod
spring.profiles.active=dev
#阿里云oss
#不同的服務(wù)器,地址不同
aliyun.oss.file.endpoint=oss-cn-shanghai.aliyuncs.com
aliyun.oss.file.keyid=LTAI5tMYCr1pxcx4vz2o7riE
aliyun.oss.file.keysecret=vtAZaFH4CqJcqFj5oyyuRobivPNK8p
#bucket可以在控制臺(tái)創(chuàng)建,也可以在java代碼創(chuàng)建
aliyun.oss.file.bucketname=aaa-1010
然后創(chuàng)建相應(yīng)的包service, controller, utils等。
utils工具類(lèi)代碼:
@Component
public class Utils implements InitializingBean {
//讀取配置文件內(nèi)容 value注解讀取屬性值
@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;
//定義公開(kāi)靜態(tài)常量
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;
}
}
?通過(guò)value注解獲取配置中的結(jié)果,注意value引用的包是spring里面的org.springframework.beans.factory.annotation.Value,不能引錯(cuò)。再設(shè)置幾個(gè)公共靜態(tài)常量,將value注解得到的配置結(jié)果給到這幾個(gè)靜態(tài)常量,后續(xù)就可以通過(guò)方法直接調(diào)用。
swagger配置:參考上篇文章(注意相關(guān)的注解)
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket webApiConfig(){
return new Docket(DocumentationType.SWAGGER_2)
.groupName("webApi")
.apiInfo(webApiInfo())
.select()
.paths(Predicates.not(PathSelectors.regex("/admin/.*")))
.paths(Predicates.not(PathSelectors.regex("/error.*")))
.build();
}
private ApiInfo webApiInfo(){
return new ApiInfoBuilder()
.title("API文檔")
.description("接口定義")
.version("1.0")
.contact(new Contact("mzz", "http://www.baidu.com",
"1345656307@qq.com"))
.build();
}
}
service接口以及實(shí)現(xiàn)類(lèi)
public interface OssService {
String uploadFile(MultipartFile file);
}
@Service
public class OssServiceImpl implements OssService {
@Override
public String uploadFile(MultipartFile file) {
String endpoint = Utils.END_POINT;
String accessKeyId = Utils.ACCESS_KEY_ID;
String accessKeySecret = Utils.ACCESS_KEY_SECRET;
String bucketName = Utils.BUCKET_NAME;
try {
// 創(chuàng)建OSSClient實(shí)例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
InputStream inputStream =file.getInputStream();
//獲取文件名稱(chēng)
String fileName = file.getOriginalFilename();
//1 在文件名稱(chēng)里面添加隨機(jī)唯一值
String uuid = UUID.randomUUID().toString().replaceAll("-","");
fileName=uuid+fileName;
//2 文件按照日期分類(lèi)
String datePath = new DateTime().toString("yyyy/MM/dd");
//拼接
fileName = datePath+"/"+fileName;
//oss方法實(shí)現(xiàn)上傳
//第一個(gè)參數(shù) bucket名稱(chēng)
//第二個(gè)參數(shù) 上傳到oss文件路徑和名稱(chēng) fileName
//第三個(gè)參數(shù) 上傳文件輸入流
ossClient.putObject(bucketName, fileName, inputStream);
ossClient.shutdown();
//把上傳之后文件路徑返回
//需要把上傳到阿里云oss路徑手動(dòng)拼接出來(lái)
String url = "https://"+bucketName+"."+endpoint+"/"+fileName;
return url;
} catch (Exception e){
e.printStackTrace();
return null;
}
}
}
這邊需要注意一下,因?yàn)椴煌挠脩?hù)可能上傳相同的文件,所以需要通過(guò)uuid生成一個(gè)隨機(jī)唯一值,不加的話可能會(huì)導(dǎo)致第二次上傳相同的文件覆蓋掉前一次的文件。并且將文件按照日期分類(lèi),可以通過(guò)拼接完成。
controller代碼:
@RestController
@RequestMapping("/fileoss")
public class OssController {
@Resource
private OssService ossService;
@PostMapping
public R uploadOssFile(MultipartFile file){
//獲取上傳文件 MultipartFile
String url = ossService.uploadFile(file); //返回上傳到oss的路徑
return R.ok().data("url",url);
}
}
啟動(dòng)類(lèi):
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
@ComponentScan(basePackages = {"com.example"})
public class DemoossApplication {
public static void main(String[] args) {
SpringApplication.run(DemoossApplication.class, args);
}
}
啟動(dòng)類(lèi)需要注意,不涉及數(shù)據(jù)庫(kù)的話有可能會(huì)報(bào)錯(cuò)
1.@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)括號(hào)里面的exclude = DataSourceAutoConfiguration.class需要加上,因?yàn)槲疫@邊沒(méi)有用的數(shù)據(jù)庫(kù)的東西,如果不加會(huì)報(bào)錯(cuò)。
2.注解用@SpringBootApplication,在application.properties中加上數(shù)據(jù)庫(kù)的配置信息。
一般我們通過(guò)第一種方式實(shí)現(xiàn)。
最后進(jìn)行swagger測(cè)試
?
這是看一下阿里云oss里面就有記錄了
?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-822487.html文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-822487.html
?
到了這里,關(guān)于springboot整合阿里云oss實(shí)現(xiàn)文件上傳的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!