oss文档:https://help.aliyun.com/document_detail/84842.html?spm=a2c4g.11186623.6.846.965d2722nDrmVP
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();
/**
* 通过URL删除用户头像
* @param url
*/
void removeAvatar(String url);
@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();
}
@ApiOperation(value = "删除头像")
@GetMapping("remove")
public R removeAvatar(@ApiParam(value = "url地址",required = true)
@RequestBody String url) {
fileService.removeAvatar(url);
return R.ok().message("删除成功");
}
edu微服务中实现远程调用
@Service
@FeignClient("service-oss")//服务注册中心的服务名称 其实也就是远程服务的地址
public interface OssFileService {
@GetMapping("/admin/oss/file/remove")
R removeAvatar(@RequestBody String url);
}
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;
}
@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秒左右。
所以我们将前端访问超时时长加长点。