阿里云OSS存储、头像上传
相信大家在做web开发过程中肯定会遇到头像上传功能,这里使用OSS进行头像上传存储
先登录:https://www.aliyun.com/

这里最好选择支付宝扫码登录,相信大家都进行了支付宝的实名认证
如果可以的话,可以往账户里存1块钱,这样不会造成存储量过大欠费
然后选择产品中的存储,OSS

进来后选择开通,因为我实现已经开通好了,所以我这里是管理控制台

下面进入后台接口编写
首先,创建一个对外访问接口
import com.atguigu.commonutils.Result; import com.atguigu.oss.service.impl.FileServiceImpl; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; @Api(description = "阿里云文件管理") @RestController @RequestMapping("/oss/file") @CrossOrigin public class FileController { @Autowired private FileServiceImpl fileService; @ApiOperation(value = "文件上传") @PostMapping("/upload") public Result upload(@ApiParam(name = "file",value = "文件",required = true) @RequestParam("file") MultipartFile multipartFile){ String url = fileService.upload(multipartFile); return Result.succ().message("文件上传成功").data("url",url); } }
编写service层接口
import org.springframework.web.multipart.MultipartFile; public interface FileService { /** * 文件上传至阿里云 * @param file * @return */ String upload(MultipartFile file); }
实现接口
import com.aliyun.oss.OSS; import com.aliyun.oss.OSSClientBuilder; import com.aliyun.oss.model.CannedAccessControlList; import com.atguigu.oss.service.FileService; import com.atguigu.oss.util.ConstantPropertiesUtil; import org.joda.time.DateTime; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import java.io.InputStream; import java.util.UUID; @Service public class FileServiceImpl implements FileService { /** * 文件上传至阿里云 * * @param file * @return */ @Override public String upload(MultipartFile file) { String endPoint = ConstantPropertiesUtil.END_POINT; String accessKeyId = ConstantPropertiesUtil.ACCESS_KEY_ID; String accessKeySecret = ConstantPropertiesUtil.ACCESS_KEY_SECRET; String bucketName = ConstantPropertiesUtil.BUCKET_NAME; String uploadUrl = null; try { // 创建OSSClient实例。 OSS ossClient = new OSSClientBuilder().build(endPoint, accessKeyId, accessKeySecret); if (!ossClient.doesBucketExist(bucketName)){ //创建bucket ossClient.createBucket(bucketName); //设置oss实例的访问权限:公共读 ossClient.setBucketAcl(bucketName, CannedAccessControlList.PublicRead); } // 获取上传文件流。 InputStream inputStream = file.getInputStream(); String filename = file.getOriginalFilename(); String uuid = UUID.randomUUID().toString().replaceAll("-",""); filename = uuid+filename; String datePath = new DateTime().toString("yyyy/MM/dd"); filename = datePath+"/"+filename; //文件上传至阿里云 ossClient.putObject(bucketName, filename, inputStream); //关闭OSSClient ossClient.shutdown(); uploadUrl = "https://"+bucketName+"."+endPoint+"/"+filename; }catch (Exception e){ e.printStackTrace(); } return uploadUrl; } }
这里因为需要用到几个固定值
所以我写在了配置文件中
#服务端口 server.port=8002 #服务名 spring.application.name=service-oss #环境设置:dev、test、prod spring.profiles.active=dev #阿里云 OSS #不同的服务器,地址不同 aliyun.oss.file.endpoint=your aliyun.oss.file.keyid=your aliyun.oss.file.keysecret=your #bucket可以在控制台创建,也可以使用java代码创建 aliyun.oss.file.bucketname=your
下面写一个工具类来取出值
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; @Override public void afterPropertiesSet() throws Exception { END_POINT = endpoint; ACCESS_KEY_ID = keyId; ACCESS_KEY_SECRET = keySecret; BUCKET_NAME = bucketName; } }
然后使用swagger进行测试

查看数据库

存储成功
进入OSS文件目录中

文件存储成功
这里前端我使用的是vue+element-ui


觉得有用的小伙伴记得点个收藏哦~
浙公网安备 33010602011771号