从阿里云获取OSS的信息
引入Maven依赖
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>2.8.3</version>
</dependency>
Oss属性配置类
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
@Slf4j
public class OssProperties implements InitializingBean {
@Value("${oss.end-point}")
private String endPoint;
@Value("${oss.bucket-name}")
private String bucketName;
@Value("${oss.access-key-secret}")
private String accessKeySecret;
@Value("${oss.access-key-id}")
private String accessKeyId;
public static String ePoint;
public static String bName;
public static String secret;
public static String keyId;
@Override
public void afterPropertiesSet() {
ePoint = this.endPoint;
bName = this.bucketName;
secret = this.accessKeySecret;
keyId = this.accessKeyId;
}
}
上传文件大小限制配置
import org.springframework.boot.web.servlet.MultipartConfigFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.util.unit.DataSize;
import javax.servlet.MultipartConfigElement;
@Configuration
public class OssConfig {
@Bean
public MultipartConfigElement multipartConfigElement() {
MultipartConfigFactory factory = new MultipartConfigFactory();
factory.setMaxFileSize(DataSize.ofMegabytes(48));
factory.setMaxRequestSize(DataSize.ofMegabytes(96));
return factory.createMultipartConfig();
}
}
服务层
import org.springframework.web.multipart.MultipartFile;
public interface OssService {
String uploadFile(MultipartFile file);
}
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.guli.common_util.ApiException;
import com.guli.service_oss.config.OssProperties;
import com.guli.service_oss.service.OssService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.io.InputStream;
import java.util.UUID;
@Service
@Slf4j
public class OssServiceImpl implements OssService {
@Override
public String uploadFile(MultipartFile file) {
InputStream inputStream = null;
OSS ossClient = null;
try {
inputStream = file.getInputStream();
String filename = file.getOriginalFilename();
String uuid = UUID.randomUUID().toString().replaceAll("-","");
filename = uuid + filename;
ossClient = new OSSClientBuilder().build(OssProperties.ePoint, OssProperties.keyId, OssProperties.secret);
ossClient.putObject(OssProperties.bName, filename, inputStream);
return "https://" + OssProperties.bName+"."+ OssProperties.ePoint +"/" + filename;
} catch (IOException e) {
log.error("【文件上传失败】:{}", e.getMessage());
throw new ApiException("上传文件失败");
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
log.error("【关闭文件流失败】");
}
}
}
}
}
控制层
import com.guli.common_util.R;
import com.guli.service_oss.service.OssService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
@Api(tags = "文件模块")
@RestController
public class OssController {
private final OssService ossService;
public OssController(OssService ossService) {
this.ossService = ossService;
}
@ApiOperation("上传文件")
@PostMapping("/upload")
public R uploadFile(MultipartFile file){
return R.ok().data("url", ossService.uploadFile(file));
}