一,官网地址
https://help.aliyun.com/document_detail/84781.html
一切依据于官网
二,导入依赖
<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>
三,创建配置文件
#服务端口
server.port=8205
#服务名
spring.application.name=service-oss#环境设置:dev、test、prod
spring.profiles.active=dev#阿里云 OSS
#不同的服务器,地址不同
aliyun.oss.file.endpoint=oss-cn-beijing.aliyuncs.com
aliyun.oss.file.keyid=your accessKeyId
aliyun.oss.file.keysecret=your accessKeySecret
#bucket可以在控制台创建,也可以使用java代码创建
aliyun.oss.file.bucketname=guli-file
四创建启动类
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
@ComponentScan("com.atguigu")
public class OssApplication {public static void main(String[] args) {SpringApplication.run(OssApplication.class,args);}
}
五,创建常量类
由于环境的不同,配置需要变化,因此需要将配置文件变为软编码而不是写在硬编码里面,耦合性较高
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;@Component
public class ConstantPropertiesUtil 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;@Overridepublic void afterPropertiesSet() throws Exception {END_POINT = endpoint;ACCESS_KEY_ID = keyId;ACCESS_KEY_SECRET = keySecret;BUCKET_NAME = bucketName;}
}
六,创建controller→service
import com.atguigu.yygh.common.R;
import com.atguigu.yygh.oss.service.OssService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;@Api(tags = "文件上传接口")
@RestController
@RequestMapping("/admin/oss/file")
public class OssController {@Autowiredprivate OssService ossService;/*** @Description: 上传文件* @return: 文件的url* @param:文件流* @author: Mr zhan*/@ApiOperation("上传图片到阿里云")@PostMapping("upload")public R upload(MultipartFile file) {//传递到serviceString fileUrl=ossService.upload(file);return R.ok().data("file",fileUrl);}
}
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.atguigu.yygh.oss.service.OssService;
import com.atguigu.yygh.oss.util.ConstantPropertiesUtil;
import org.joda.time.DateTime;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;@Service
public class OssServiceImpl implements OssService {/*** @Description: 上传文件* @return: 文件的url* @param:文件流* @author: Mr zhan*/@Overridepublic String upload(MultipartFile file) {//1.获取文件的名称String filename = file.getOriginalFilename();//2.准备参数//地域结点String endpoint=ConstantPropertiesUtil.END_POINT;//唯一idString accessKeyId=ConstantPropertiesUtil.ACCESS_KEY_ID;//id的对应的唯一secretString accessKeySecret=ConstantPropertiesUtil.ACCESS_KEY_SECRET;//存储桶String bucketName=ConstantPropertiesUtil.BUCKET_NAME;//文件存储的路径// String objectName="用下面的filename代替";//3.创建客户端OSS ossClient= new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);String uuid = UUID.randomUUID().toString().replaceAll("-","");filename=uuid+filename;//4.由于真实的开发需要,方便运营,因此需要分类格式如下: 2022/03/05/图片名称SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd");String month = format.format(new Date());filename=month+"/"+filename;//上传try {ossClient.putObject(bucketName,filename,file.getInputStream());} catch (IOException e) {e.printStackTrace();}finally {//关闭资源ossClient.shutdown();}return "https://"+bucketName+"."+endpoint+"/"+filename;}
}