引入依赖
<dependency>
<groupId>com.aliyun.ossgroupId>
<artifactId>aliyun-sdk-ossartifactId>
<version>3.9.1version>
dependency>
<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.0modelVersion>
<groupId>com.orchidsgroupId>
<artifactId>aliyun-ossartifactId>
<version>0.0.1-SNAPSHOTversion>
<name>aliyun-ossname>
<description>aliyun-ossdescription>
<properties>
<java.version>1.8java.version>
<project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8project.reporting.outputEncoding>
<spring-boot.version>2.7.12spring-boot.version>
properties>
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>org.projectlombokgroupId>
<artifactId>lombokartifactId>
<optional>trueoptional>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-testartifactId>
<scope>testscope>
dependency>
<dependency>
<groupId>com.github.xiaoymingroupId>
<artifactId>knife4j-openapi3-spring-boot-starterartifactId>
<version>4.1.0version>
dependency>
<dependency>
<groupId>com.aliyun.ossgroupId>
<artifactId>aliyun-sdk-ossartifactId>
<version>3.9.1version>
dependency>
<dependency>
<groupId>joda-timegroupId>
<artifactId>joda-timeartifactId>
<version>2.10.1version>
dependency>
dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-dependenciesartifactId>
<version>${spring-boot.version}version>
<type>pomtype>
<scope>importscope>
dependency>
dependencies>
dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-compiler-pluginartifactId>
<version>3.8.1version>
<configuration>
<source>1.8source>
<target>1.8target>
<encoding>UTF-8encoding>
configuration>
plugin>
<plugin>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-maven-pluginartifactId>
<version>${spring-boot.version}version>
<configuration>
<mainClass>com.orchids.aliyunoss.AliyunOssApplicationmainClass>
<skip>trueskip>
configuration>
<executions>
<execution>
<id>repackageid>
<goals>
<goal>repackagegoal>
goals>
execution>
executions>
plugin>
plugins>
build>
project>
编写配置文件
server:
port: 8080
aliyun:
endpoint: oss-cn-wuhan-lr.aliyuncs.com
accessKey: your-accessKey
secretKey: your-secretKey
bucketname: nullpointer2024
编写配置aliyun配置类
package com.orchids.aliyunoss.aliyun;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
@Data
@ConfigurationProperties(prefix = "aliyun")
public class AliyunProperties {
private String endpoint;
private String accessKey;
private String secretKey;
private String bucketName;
}
package com.orchids.aliyunoss.aliyun;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClient;
import com.aliyun.oss.OSSClientBuilder;
import lombok.Data;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@EnableConfigurationProperties(AliyunProperties.class)
public class AliyunConfiguration {
@Autowired
private AliyunProperties aliyunProperties;
@Bean
public OSS ossClient(){
return new OSSClientBuilder()
.build(
aliyunProperties.getEndpoint(),
aliyunProperties.getAccessKey(),
aliyunProperties.getSecretKey());
}
}
编写knife4j配置文件
package com.orchids.aliyunoss.web.config;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Info;
import org.springdoc.core.GroupedOpenApi;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class Knife4jConfiguration {
@Bean
public OpenAPI OpenAPI() {
return new OpenAPI().info(
new Info()
.title("AliyunOSSAPI")
.version("1.0")
.description("UploadAPI"));
}
@Bean
public GroupedOpenApi StudentAPI() {
return GroupedOpenApi.builder().group("AliyunOssFile管理").
pathsToMatch(
"/aliyun/**"
).
build();
}
}
结果返回类
package com.orchids.aliyunoss.model.result;
import lombok.Data;
@Data
public class Result<T>{
private Integer code;
private String message;
private T data;
public Result() {
}
private static <T> Result<T> build(T data) {
Result<T> result = new Result<>();
if (data != null)
result.setData(data);
return result;
}
public static <T> Result<T> build(T body, ResultCode resultCodeEnum) {
Result<T> result = build(body);
result.setCode(resultCodeEnum.getCode());
result.setMessage(resultCodeEnum.getMessage());
return result;
}
public static <T> Result<T> ok(T data) {
return build(data, ResultCode.SUCCESS);
}
public static <T> Result<T> ok() {
return Result.ok(null);
}
public static <T> Result<T> fail() {
return build(null, ResultCode.FAIL);
}
}
controller
package com.orchids.aliyunoss.web.controller;
import com.orchids.aliyunoss.model.result.Result;
import com.orchids.aliyunoss.web.service.FileService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
@Tag(name = "FileUpload")
@RestController
@RequestMapping("/aliyun")
@AllArgsConstructor
public class FileUploadController {
private final FileService fileService;
@Operation(summary = "文件上传")
@PostMapping("fileload")
public Result<String> upload(@RequestParam MultipartFile file) {
String url = fileService.upload(file);
return Result.ok(url);
}
}
service
package com.orchids.aliyunoss.web.service;
import org.springframework.web.multipart.MultipartFile;
public interface FileService {
String upload(MultipartFile file);
}
package com.orchids.aliyunoss.web.service.impl;
import com.aliyun.oss.OSS;
import com.orchids.aliyunoss.aliyun.AliyunProperties;
import com.orchids.aliyunoss.web.service.FileService;
import lombok.RequiredArgsConstructor;
import org.joda.time.DateTime;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.io.InputStream;
import java.util.UUID;
@Service
@RequiredArgsConstructor
public class FileServiceImpl implements FileService {
private final OSS ossClient;
private final AliyunProperties aliyunProperties;
@Override
public String upload(MultipartFile file) {
try {
InputStream inputStream = file.getInputStream();
String fileName = file.getOriginalFilename();
String uuid = UUID.randomUUID().toString().replaceAll("-", "");
fileName = uuid + fileName;
String timeUrl = new DateTime().toString("yyyy/MM/dd");
fileName = timeUrl + "/" + fileName;
ossClient.putObject(aliyunProperties.getBucketName(), fileName, inputStream);
ossClient.shutdown();
String url = "https://" + aliyunProperties.getBucketName() + "." + aliyunProperties.getEndpoint() + "/" + fileName;
return url;
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
}
test
