day07 - 删除讲师头像

删除讲师头像

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 = "";
String accessKeySecret = "";
String bucketName = "";
String objectName = "";

// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

// 删除文件。如需删除文件夹,请将ObjectName设置为对应的文件夹名称。如果文件夹非空,则需要将文件夹下的所有object删除后才能删除该文件夹。
ossClient.deleteObject(bucketName, objectName);

// 关闭OSSClient。
ossClient.shutdown();			

day07 - 删除讲师头像_第1张图片

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("数据不存在");
        }
    }

调用链

day07 - 删除讲师头像_第2张图片

三 修改前端

前端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秒左右。

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

你可能感兴趣的:(谷粒学院,java)