ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

讲师头像上传后端实现

2020-11-28 14:00:42  阅读:224  来源: 互联网

标签:String 上传 oss module 头像 bucketname 讲师 public originalFilename


一 新建云存储微服务

1 创建模块

Artifact:service_oss

2 配置pom.xml

检查一下guli_parent中的aliyun-sdk-oss的版本,切换到3.8.0

<dependencies>
    <!--aliyunOSS-->
    <dependency>
        <groupId>com.aliyun.oss</groupId>
        <artifactId>aliyun-sdk-oss</artifactId>
    </dependency>
</dependencies>

3 配置application.yml

server:
  port: 8120 # 服务端口
spring:
  profiles:
    active: dev # 环境设置
  application:
    name: service-oss # 服务名
aliyun:
  oss:
    endpoint: <你的endpoint>
    keyid: <你的keyid>
    keysecret: <你的keysecret>
    # bucket可以在控制台创建,也可以使用java代码创建,注意先测试bucket是否已被占用
    bucketname: gulimall-cakin

4 logback-spring.xml

修改日志路径为 guli_log/oss

5 创建启动类

创建ServiceOssApplication.java

@SpringBootApplication
@ComponentScan({"com.atguigu.guli"})
public class ServiceOssApplication {
    public static void main(String[] args) {
        SpringApplication.run(ServiceOssApplication.class, args);
    }
}

6 启动项目

测试项目初始化是否成功,报告如下错误

原因:jdbc依赖引入项目后,springboot的自动配置试图在配置文件中查找jdbc相关配置

解决方案:主类上添加注解exclude属性,禁用jdbc自动配置

@SpringBootApplication(exclude = DataSourceAutoConfiguration.class) // 取消数据源自动配置

二 后端实现文件上传

1 从配置文件读取常量

创建常量读取工具类:OssProperties.java

@Data
@Component
@ConfigurationProperties(prefix = "aliyun.oss")
public class OssProperties {
    private String endpoint;
    private String keyid;
    private String keysecret;
    private String bucketname;
}

2  Service

public interface FileService {
    /**
     * 阿里云oss文件上传
     * @param inputStream 输入流
     * @param module 文件夹名称
     * @param originalFilename 原始文件名
     * @return 文件在oss服务器上的url地址
     */
    String upload(InputStream inputStream, String module, String originalFilename);
}

3 实现类

@Service
public class FileServiceImpl implements FileService {
    /**
     * oss属性注入
     */
    @Autowired
    private OssProperties ossProperties;


    @Override
    public String upload(InputStream inputStream, String module, String originalFilename) {
        //读取配置信息
        String endpoint = ossProperties.getEndpoint();
        String keyid = ossProperties.getKeyid();
        String keysecret = ossProperties.getKeysecret();
        String bucketname = ossProperties.getBucketname();
        // 创建OSSClient实例
        OSS ossClient = new OSSClientBuilder().build(endpoint, keyid, keysecret);
        if(!ossClient.doesBucketExist(bucketname)){
            ossClient.createBucket(bucketname);
            ossClient.setBucketAcl(bucketname, CannedAccessControlList.PublicRead);
        }
        // 构建objectName:文件路径 avatar/2020/11/28/default.jpg
        String folder = new DateTime().toString("yyyy/MM/dd");
        String fileName = UUID.randomUUID().toString();
        String fileExtension = originalFilename.substring(originalFilename.lastIndexOf("."));
        String key = module +"/" + folder + "/" + fileName + fileExtension;
        // 上传文件流
        ossClient.putObject(bucketname, key, inputStream);
        // 关闭OSSClient。
        ossClient.shutdown();
        // 返回url
        //https://gulimall-cakin.oss-cn-chengdu.aliyuncs.com/avatar/default.jpg
        return "https://" + bucketname + "." + endpoint + "/" + key;
    }
}

4 控制器

@Api(description = "阿里云文件管理")
@CrossOrigin
@RestController
@RequestMapping("/admin/oss/file")
@Slf4j
public class FileController {
    /**
     * 文件上传服务
     */
    @Autowired
    private FileService fileService;


    /**
     * 功能描述:文件上传控制器
     *
     * @author cakin
     * @date 2020/11/28
     * @param file 文件
     * @param module 文件夹
     * @return R 返回给前端的数据
     */
    @ApiOperation("文件上传")
    @PostMapping("upload")
    public R upload(@ApiParam(value = "文件", required = true) @RequestParam("file") MultipartFile file,
                    @ApiParam(value = "模块", required = true) @RequestParam("module") String module) {
        try {
            InputStream inputStream = file.getInputStream();
            String originalFilename = file.getOriginalFilename();
            String uploadUrl = fileService.upload(inputStream, module, originalFilename);
            return R.ok().message("文件上传成功").data("url", uploadUrl);
        } catch (Exception e) {
            log.error(ExceptionUtils.getMessage(e));
            throw new GuliException(ResultCodeEnum.FILE_UPLOAD_ERROR);
        }
    }
}

三 测试

标签:String,上传,oss,module,头像,bucketname,讲师,public,originalFilename
来源: https://blog.csdn.net/chengqiuming/article/details/110268829

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有