上传图片

1、获取yml配置文件的中的endpoint、accessKeyId、accessKeySecret、bucketName
aliyun:
  oss:
    endpoint: oss-cn-hangzhou.aliyuncs.com
    accessKeyId: 改成自己的id
    accessKeySecret: 改成自己的秘钥
    bucketName: mall-qsd

yml配置(上图)

@Value("${aliyun.oss.endpoint}")
private String ALIYUN_OSS_ENDPOINT;

@Value("${aliyun.oss.accessKeyId}")
private String ALIYUN_OSS_ACCESSKEYID;

@Value("${aliyun.oss.accessKeySecret}")
private String ALIYUN_OSS_ACCESSKEYSECRET;

@Value("${aliyun.oss.bucketName}")
private String ALIYUN_OSS_BUCKETNAME;

2、创建上传文件的元信息,可以通过文件元信息设置HTTP header。

ObjectMetadata objectMetadata = new ObjectMetadata();
objectMetadata.setContentType("image/jpg");

3、创建OSSClient实例

OSSClient ossClient = new OSSClient(ALIYUN_OSS_ENDPOINT, ALIYUN_OSS_ACCESSKEYID, ALIYUN_OSS_ACCESSKEYSECRET);

4、文件上传(完整代码)代码

public String uploadFile(MultipartFile file) throws IOException {
   
OSSClient ossClient = new OSSClient(ALIYUN_OSS_ENDPOINT, ALIYUN_OSS_ACCESSKEYID, ALIYUN_OSS_ACCESSKEYSECRET);
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");


// 获取文件名
String fileName = multipartFile.getOriginalFilename();
    
// 获取文件后缀名
String suffixName = fileName.substring(fileName.lastIndexOf("."));
    
// 最后上传生成的文件名
String finalFileName = System.currentTimeMillis() + "" + new SecureRandom().nextInt(0x0400) + suffixName;
    
// oss中的文件夹名
String objectName = sdf.format(new Date()) + "/" + finalFileName;

// 创建上传文件的元信息,可以通过文件元信息设置HTTP header(设置了才能通过返回的链接直接访问)。
ObjectMetadata objectMetadata = new ObjectMetadata();
objectMetadata.setContentType("image/jpg");

// 文件上传
ossClient.putObject(ALIYUN_OSS_BUCKETNAME, objectName, new ByteArrayInputStream(multipartFile.getBytes()),objectMetadata);


// 设置URL过期时间为1小时。
Date expiration = new Date(System.currentTimeMillis() + 3600 * 1000);
String url = ossClient.generatePresignedUrl(ALIYUN_OSS_BUCKETNAME, objectName, expiration).toString();
ossClient.shutdown();
log.info("阿里云OSS的文件url:{}", url);
return url;
}

5、返回的url:http://mall-qsd.oss-cn-hangzhou.aliyuncs.com/20200623/1592906142043520.jpg

6、点击链接就能直接访问了(链接设置了过期时间)

删除图片

    /** * url :http://gulimall-code.oss-cn-zhangjiakou.aliyuncs.com/heima-leadnews/2020-10-10/13.jpg?Expires=1633871695&OSSAccessKeyId=LTAI4GAcBHYL68nTwPr5X6Yt&Signature=XIPBZQQS%2FDBFkIcS5dhPrhr11lg%3D * * @param url * @return */
    public String delFile(String url) {
   
        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        String[] split = url.split("\\?");
        String objectName = split[0].replace("http://gulimall-code.oss-cn-zhangjiakou.aliyuncs.com/", "");
        //转换后的objectName为heima-leadnews/2020-10-10/13.jpg
        // 删除文件。如需删除文件夹,请将ObjectName设置为对应的文件夹名称。如果文件夹非空,则需要将文件夹下的所有object删除后才能删除该文件夹。
        ossClient.deleteObject(bucketName, objectName);
        // 关闭OSSClient。
        ossClient.shutdown();
        return "null";
    }