阿里云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

 

 

 

 

觉得有用的小伙伴记得点个收藏哦~

posted @ 2020-10-28 21:35  龙欺  阅读(656)  评论(1)    收藏  举报