文章目录
- 1、创建Bucket
- 2、获取AccessKey
- 3、找开发文档
- 4、后端集成OSS
- 1、创建子模块service-oss并配置pom.xml
- 2、配置application.properties
- 3、启动项目
- 4、从配置文件读取信息
- 5、编写上传代码
- 6、使用swagger测试接口
- 7、上传成功后查看文件
1、创建Bucket
2、获取AccessKey
搜索框搜索accesskey
进到创建页面后点击人员管理-用户
3、找开发文档
4、后端集成OSS
1、创建子模块service-oss并配置pom.xml
<dependencies>
<!-- 阿里云oss依赖 -->
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
</dependency>
<!-- 日期工具栏依赖 -->
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
</dependency>
</dependencies>
2、配置application.properties
#服务端口
server.port=8002
#服务名
spring.application.name=service-oss
#环境设置:dev、test、prod
spring.profiles.active=dev
#阿里云 OSS
#不同的服务器,地址不同
#地域节点
aliyun.oss.file.endpoint=your endpoint
#accessKeyId
aliyun.oss.file.keyid=your accessKeyId
#accessKeySecret
aliyun.oss.file.keysecret=your accessKeySecret
#bucket可以在控制台创建,也可以使用java代码创建
aliyun.oss.file.bucketname=your bucketName
3、启动项目
启动时可能会报数据源未配置异常
这里有两种解决方案
1、在资源文件中配置数据库连接信息
2、在启动类上使用注解取消自动配置数据源
//exclude表示不包含,在启动的时候不需要自动配置数据源
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
@ComponentScan(basePackages = {"com.atguigu"})
public class OssApplication {
public static void main(String[] args) {
SpringApplication.run(OssApplication.class,args);
}
}
4、从配置文件读取信息
@Component
public class ConstantPropertiesUtils 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;
}
}
5、编写上传代码
获取文件存放路径
serviceImpl
@Service
public class OssServiceImpl implements OssService {
@Override
public String uploadFileAvatar(MultipartFile file) {
String endpoint = ConstantPropertiesUtils.END_POINT;
String accessKeyId = ConstantPropertiesUtils.ACCESS_KEY_ID;
String accessKeySecret = ConstantPropertiesUtils.ACCESS_KEY_SECRET;
String bucketName = ConstantPropertiesUtils.BUCKET_NAME;
try {
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
// 填写本地文件的完整路径。如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件流。
InputStream inputStream = file.getInputStream();
//获取文件名称,前面跟上UUID防止名字重复
String uuid = UUID.randomUUID().toString().replaceAll("-","");
String originalFilename = uuid+file.getOriginalFilename();
//将文件按照日期进行分类
//org.joda.time.DateTime
String datePath = new DateTime().toString("yyyy/MM/dd");
originalFilename = datePath +"/"+ originalFilename;
// 第一个参数 Bucket名称
// 第二个参数 上传到oss文件路径和文件名称
// 第三个参数 上传文件输入流
ossClient.putObject(bucketName, originalFilename, inputStream);
// 关闭OSSClient。
ossClient.shutdown();
//https://edu-2021-3-27.oss-cn-beijing.aliyuncs.com/日期/uuidXXX.png
String url = "https://"+bucketName+"."+endpoint+"/"+originalFilename;
return url;
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
}
service
import org.springframework.web.multipart.MultipartFile;
public interface OssService {
String uploadFileAvatar(MultipartFile file);
}
controller
@Api(description="阿里云文件管理")
@RestController
@RequestMapping("/eduoss/fileoss")
@CrossOrigin
public class OssController {
@Autowired
private OssService ossService;
@ApiOperation(value = "文件上传")
@PostMapping("upload")
public R uploadOssFile(
@ApiParam(name = "file", value = "文件", required = true)
MultipartFile file){
String url = ossService.uploadFileAvatar(file);
return R.ok().data("url",url);
}
}
6、使用swagger测试接口
本地swaggerURL
可能会报You have no right to access this object because of bucket acl.
异常
这是使用阿里云OSS上传文件服务时报的错,这是由于新建的子用户AccessKey没有配置相应的权限所导致的。
解决方法,配置上相应权限。
添加上权限后即可正常上传文件了。
7、上传成功后查看文件