day06 ---(04) 添加讲师上传头像功能(后端)(完善)

1、添加配置文件内容

(1)把上传固定值放到配置文件中(注意:阿里云oss服务的配置需要填写自己的相关内容)

#服务端口
server.port=8002
#服务名
spring.application.name=service-eduoss
#环境设置:dev、test、prod
spring.profiles.active=dev
#阿里云 OSS
#不同的服务器,地址不同
aliyun.oss.file.endpoint=此处须填写自己的阿里云OSS服务的endpoint
aliyun.oss.file.keyid= 此处须填写自己的阿里云OSS服务的keyid
aliyun.oss.file.keysecret= 此处须填写自己的阿里云OSS服务的keysecret
#bucket可以在控制台创建,也可以使用java代码创建
aliyun.oss.file.bucketname= 此处须填写自己的阿里云OSS服务的bucketname

(2)在utils目录下创建类,读取配置文件

@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;
    }
}

(3)使用配置信息

package com.atguigu.oosservice.service.impl;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.atguigu.oosservice.service.FileService;
import com.atguigu.oosservice.utils.ConstantPropertiesUtil;
import com.atguigu.servicebase.handler.GuliException;
import org.joda.time.DateTime;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.io.InputStream;
import java.util.UUID;
@Service
public class FileServiceImpl implements FileService {
    //上传文件阿里云OSS
    @Override
    public String uploadFileOss(MultipartFile file) {
        // Endpoint以杭州为例,其它Region请按实际情况填写。
        String endpoint = ConstantPropertiesUtil.END_POINT;
// 云账号AccessKey有所有API访问权限,建议遵循阿里云安全最佳实践,创建并使用RAM子账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建。
        String accessKeyId = ConstantPropertiesUtil.ACCESS_KEY_ID;
        String accessKeySecret = ConstantPropertiesUtil.ACCESS_KEY_SECRET;
        String bucketName = ConstantPropertiesUtil.BUCKET_NAME;
        try {
            // 创建OSSClient实例。
            OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId,accessKeySecret);
            //上传文件流
            InputStream inputStream = file.getInputStream();
            String fileName = file.getOriginalFilename();
            //uuid
            String uuid = UUID.randomUUID().toString();
            //11223334401.jpg
            fileName = uuid+fileName;
            //定义文件目录
            //目录/2020/06/22/01.jpg
            String path = new DateTime().toString("yyyy/MM/dd");//2020/06/22
            fileName = path+"/"+fileName;
            ossClient.putObject(bucketName, fileName, inputStream);
            // 关闭OSSClient。
            ossClient.shutdown();
            //拼接url
            //https://guli-file200211test.oss-cn-beijing.aliyuncs.com/01.jpg
            String url = "https://"+bucketName+"."+endpoint+"/"+fileName;
            return url;
        } catch (IOException e) {
            throw new GuliException(20001,"上传失败");
        }
    }
}

2、使用UUID实现文件名不重复

String fileName = file.getOriginalFilename();
//uuid
String uuid = UUID.randomUUID().toString();
//11223334401.jpg
fileName = uuid+fileName;

3、把文件分类管理,根据日期存储文件

//定义文件目录
//目录/2020/06/22/01.jpg
String path = new DateTime().toString("yyyy/MM/dd");//2020/06/22
fileName = path+"/"+fileName;

你可能感兴趣的:(在线教育项目)