美文网首页
day07-删除讲师头像

day07-删除讲师头像

作者: Summer2077 | 来源:发表于2020-08-07 22:46 被阅读0次

    删除讲师头像

    oss文档:https://help.aliyun.com/document_detail/84842.html?spm=a2c4g.11186623.6.846.965d2722nDrmVP

    一、删除文件接口

    oss微服务中实现删除文件接口

    1. 查看OSS文档

    • 删除单个文件实例代码:
    // Endpoint以杭州为例,其它Region请按实际情况填写。
    String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
    // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
    String accessKeyId = "<yourAccessKeyId>";
    String accessKeySecret = "<yourAccessKeySecret>";
    String bucketName = "<yourBucketName>";
    String objectName = "<yourObjectName>";
    
    // 创建OSSClient实例。
    OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
    
    // 删除文件。如需删除文件夹,请将ObjectName设置为对应的文件夹名称。如果文件夹非空,则需要将文件夹下的所有object删除后才能删除该文件夹。
    ossClient.deleteObject(bucketName, objectName);
    
    // 关闭OSSClient。
    ossClient.shutdown();           
    
    在这里插入图片描述

    2.FileService

     /**
         * 通过URL删除用户头像
         * @param url
         */
        void removeAvatar(String url);
    

    3. FileServiceImpl

    @Override
        public void removeAvatarById(String url) {
            //通过对象取出配置文件中的参数值
            String bucketname = ossProperties.getBucketname();
            String endpoint = ossProperties.getEndpoint();
            String keyid = ossProperties.getKeyid();
            String keysecret = ossProperties.getKeysecret();
            // 创建OSSClient实例。
            OSS ossClient = new OSSClientBuilder().build(endpoint, keyid, keysecret);
    
            // 删除文件。如需删除文件夹,请将ObjectName设置为对应的文件夹名称。如果文件夹非空,则需要将文件夹下的所有object删除后才能删除该文件夹。
            // 拿到的URL地址: https://guli-file-99.oss-cn-shanghai.aliyuncs.com/avatar/v2-5a0a06307129f8e1d5bf9ffa10e759fc_720w.jpg
            // 需要得到的objectName avatar/v2-5a0a06307129f8e1d5bf9ffa10e759fc_720w.jpg
            String host = "https://"+bucketname+"."+endpoint+"/";
            String objectName = url.substring(host.length());
            ossClient.deleteObject(bucketname, objectName);
    
            // 关闭OSSClient。
            ossClient.shutdown();
        }
    

    4. FileController

     @ApiOperation(value = "删除头像")
        @GetMapping("remove")
        public R removeAvatar(@ApiParam(value = "url地址",required = true)
                                  @RequestBody String url) {
           fileService.removeAvatar(url);
           return R.ok().message("删除成功");
        }
    

    二 通过Openfeign调用

    edu微服务中实现远程调用

    1. 创建远程调用接口

    @Service
    @FeignClient("service-oss")//服务注册中心的服务名称 其实也就是远程服务的地址
    public interface OssFileService {
        @GetMapping("/admin/oss/file/remove")
        R removeAvatar(@RequestBody String url);
    }
    

    2. 调用远程方法

    TeacherService中增加根据讲师id删除图片的方法

    接口

    boolean removeAvatarById(String id);
    

    实现

    @Override
        public boolean removeAvatarById(String id) {
            Teacher teacher = baseMapper.selectById(id);
            if(teacher != null) {
                String avatar = teacher.getAvatar();
                System.out.println(avatar);
                if(!StringUtils.isEmpty(avatar)){
                    //删除图片
                    R r = ossFileService.removeFile(avatar);
                    return r.getSuccess();
                }
            }
            return false;
        }
    

    3. controller层

       @ApiOperation("根据ID列表删除讲师")
        @DeleteMapping("batch-remove")
        public R getByIdList(@ApiParam(value = "讲师id",required = true)
                                 @RequestBody List<String> idList){
            for (String s : idList) {
                teacherService.removeAvatarById(s);
            }
            boolean b = teacherService.removeByIds(idList);
            if (b){
                return R.ok().message("删除成功");
            }else {
                return R.error().message("数据不存在");
            }
        }
    

    调用链

    在这里插入图片描述

    三 修改前端

    前端src/request.js修改超时时间

    // 创建axios实例
    const service = axios.create({
      baseURL: process.env.BASE_API, // api 的 base_url
      timeout: 12000 // 请求超时时间
    })
    
    

    此业务属于长流程业务,前端访问edu需要5秒左右,edu访问oos需要5秒左右,Oss访问阿里云需要5秒左右。

    所以我们将前端访问超时时长加长点。

    相关文章

      网友评论

          本文标题:day07-删除讲师头像

          本文链接:https://www.haomeiwen.com/subject/osxcdktx.html