java springboot阿里云oss上传和删除工具类

java demo

package com.lofxve.utils;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.ObjectMetadata;

import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;

/**
 * @ProjectName: java-practice
 * @Package: com.lofxve
 * @ClassName: OssUtils
 * @Author: lofxve
 * @Description:
 * @Date: 2021/4/20 15:28
 * @Version: 1.0
 */
public class OssUtils {
    // Endpoint以杭州为例,其它Region请按实际情况填写。
    private static String endpoint = "";
    // 云账号AccessKey有所有API访问权限,
    private static String accessKeyId = "";
    private static String accessKeySecret = "";
    // 桶名
    private static String bucketName = "";
    // baseUrl
    private static String url = "";

    /**
     * @param fileName
     * @param inputStream
     * @Method upload
     * @Author lofxve
     * @Description 以文件形式流形式上传
     * @Date 2021/4/21 8:51
     * @Return java.lang.String
     */
    public static String uploadByFile(String fileName, InputStream inputStream) {
        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

        // meta设置请求头,解决访问图片地址直接下载
        ObjectMetadata meta = new ObjectMetadata();
        meta.setContentType("image/jpg");

        // 获取文件名
        String objectName = getObjectName();
        // 上传
        ossClient.putObject(bucketName, objectName, inputStream, meta);

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

        return url + "/" + objectName;
    }

    public static String uploadByByte(byte[] imageByte) {
        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

        // meta设置请求头,解决访问图片地址直接下载
        ObjectMetadata meta = new ObjectMetadata();
        meta.setContentType("image/jpg");

        // 获取文件名
        String objectName = getObjectName();

        // 填写Bucket名称和Object完整路径。Object完整路径中不能包含Bucket名称。
        ossClient.putObject(bucketName, objectName, new ByteArrayInputStream(imageByte), meta);

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

        return url + "/" + objectName;
    }

    public static String getObjectName() {
        // <yourObjectName>表示上传文件到OSS时需要指定包含文件后缀在内的完整路径,例如 images/2020/11/11/asdf.jpg。
        String objectName = "images/" + new SimpleDateFormat("yyyy/MM/dd").format(new Date())
                + "/" + System.currentTimeMillis() + UUID.randomUUID().toString().replace("-","") + ".jpg";
        return objectName;
    }

    /**
     * @param objectName
     * @Method deleteOss
     * @Author lofxve
     * @Description 删除oss文件
     * @Date 2021/4/21 9:02
     * @Return boolean
     */
    public static boolean deleteOss(String objectName) {
        try {
            // 创建OSSClient实例。
            OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
            URL url = new URL(objectName);
            // 删除文件。如需删除文件夹,请将ObjectName设置为对应的文件夹名称。如果文件夹非空,则需要将文件夹下的所有object删除后才能删除该文件夹。
            ossClient.deleteObject(bucketName, url.getPath().replaceFirst("/", ""));
            // 关闭OSSClient。
            ossClient.shutdown();
        } catch (MalformedURLException e) {
            e.printStackTrace();
            //格式错误的URL异常
        }
        return true;
    }

    public static void main(String[] args) throws FileNotFoundException, MalformedURLException {
        String filePath = "C:\\B3AABC31A96839494504F68450DC1BBC.png";
        File file = new File(filePath);
        // 文件流上传
//        String upload = uploadByFile(file.getName(), new FileInputStream(file));
//        System.out.println(upload);

        // 字节流上传
//        try {
//            byte[] fileBytes = Files.readAllBytes(file.toPath());
//            String upload = uploadByByte(fileBytes);
//            System.out.println(upload);
//        } catch (IOException e) {
//            e.printStackTrace();
//        }

        // 删除
//        String name = "https://kkkk.oss-cn-hangzhou.aliyuncs.com/images/2021/04/21/1618996531428f2617510789542e788526a882c6fe559.jpg";
//        boolean b = deleteOss(name);
//        System.out.println(b);
    }
}

spring 集成

package com.newgrand.saas.platform.core;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.ObjectMetadata;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import java.io.ByteArrayInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;

/**
 * @ProjectName: java-practice
 * @Package: com.lofxve
 * @ClassName: OssUtils
 * @Author: lofxve
 * @Description:
 * @Date: 2021/4/20 15:28
 * @Version: 1.0
 */
@Component
public class OssUtils {
    /**
     * 云账号AccessKey有所有API访问权限,
     */
    @Value("${aliyun.oss.file.accessKeyId}")
    private String accessKeyId;
    @Value("${aliyun.oss.file.accessKeySecret}")
    private String accessKeySecret;
    /**
     * 桶名
     */
    @Value("${aliyun.oss.file.bucketName}")
    private String bucketName;
    @Value("${aliyun.oss.file.url}")
    /**
     * baseUrl
     */
    private String url;
    /**
     * Endpoint以杭州为例,其它Region请按实际情况填写。
     */
    @Value("${aliyun.oss.file.endpoint}")
    private String endpoint;
    /**
     * 生成url权限时间
     */
    @Value("${aliyun.oss.file.expiration}")
    private Integer expiration;
    /**
     * @param fileName
     * @param inputStream
     * @Method upload
     * @Author lofxve
     * @Description 以文件形式流形式上传
     * @Date 2021/4/21 8:51
     * @Return java.lang.String
     */
    public String uploadByFile(String fileName, InputStream inputStream) {
        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

        // meta设置请求头,解决访问图片地址直接下载
        ObjectMetadata meta = new ObjectMetadata();
        meta.setContentType("image/jpg");

        // 获取文件名
        String objectName = getObjectName();
        // 上传
        ossClient.putObject(bucketName, objectName, inputStream, meta);

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

        return url + "/" + objectName;
    }

    public String uploadByByte(byte[] imageByte) {
        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

        // meta设置请求头,解决访问图片地址直接下载
        ObjectMetadata meta = new ObjectMetadata();
        meta.setContentType("image/jpg");

        // 获取文件名
        String objectName = getObjectName();

        // 填写Bucket名称和Object完整路径。Object完整路径中不能包含Bucket名称。
        ossClient.putObject(bucketName, objectName, new ByteArrayInputStream(imageByte), meta);

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

        return url + "/" + objectName;
    }

    public String getObjectName() {
        // <yourObjectName>表示上传文件到OSS时需要指定包含文件后缀在内的完整路径,例如 images/2020/11/11/asdf.jpg。
        String objectName = "images/" + new SimpleDateFormat("yyyy/MM/dd").format(new Date())
                + "/" + System.currentTimeMillis() + UUID.randomUUID().toString().replace("-", "") + ".jpg";
        return objectName;
    }

    /**
     * @param objectName
     * @Method deleteOss
     * @Author lofxve
     * @Description 删除oss文件
     * @Date 2021/4/21 9:02
     * @Return boolean
     */
    public boolean deleteOss(String objectName) {
        try {
            // 创建OSSClient实例。
            OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
            URL url = new URL(objectName);
            // 删除文件。如需删除文件夹,请将ObjectName设置为对应的文件夹名称。如果文件夹非空,则需要将文件夹下的所有object删除后才能删除该文件夹。
            ossClient.deleteObject(bucketName, url.getPath().replaceFirst("/", ""));
            // 关闭OSSClient。
            ossClient.shutdown();
        } catch (MalformedURLException e) {
            e.printStackTrace();
            //格式错误的URL异常
        }
        return true;
    }
   /**
     * @param objectName
     * @Method getUrl
     * @Author lofxve
     * @Description oss私有访问url
     * @Date 2021/5/7 13:21
     * @Return java.lang.String
     */
    public String getUrl(String objectName) {
        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        // 设置URL过期时间为1小时。
        Date expirationDate = new Date(System.currentTimeMillis() + expiration * 60 * 1000);
        // 生成以GET方法访问的签名URL,访客可以直接通过浏览器访问相关内容。
        URL url = ossClient.generatePresignedUrl(bucketName, objectName, expirationDate);
        return url.toString();
    }
}

yaml

aliyun:
  oss:
    file:
      accessKeyId: 6a2P5oyv5Lic6a2P5oyv5Lic6a2P5oyv5Lic
      accessKeySecret: 6a2P5oyv5Lic6a2P5oyv5Lic6a2P5oyv5Lic6a2P5oyv5Lic6a2P5oyv5Lic
      endpoint: oss-cn-hangzhou.aliyuncs.com
      bucketName: kkkk
      url: https://kkkk.oss-cn-hangzhou.aliyuncs.com
      expiration: 60 #单位分钟

图片与base64字符串互转,base64与byte[]互转

package com.lofxve;

import org.apache.commons.codec.binary.Base64;

import java.io.*;

/**
 * @ProjectName: java-practice
 * @Package: com.lofxve.wzd.com
 * @ClassName: FileBase64ConvertUitl
 * @Author: lofxve
 * @Description:
 * @Date: 2021/4/20 16:04
 * @Version: 1.0
 */
public class FileBase64ConvertUitl {
    /**
     * @param imgFile 图片路径
     * @Method imageToBase64Str
     * @Author lofxve
     * @Description 图片转base64字符串
     * @Date 2021/4/21 9:24
     * @Return java.lang.String
     */
    public static String imageToBase64Str(String imgFile) {
        InputStream inputStream = null;
        byte[] data = null;
        try {
            inputStream = new FileInputStream(imgFile);
            data = new byte[inputStream.available()];
            inputStream.read(data);
            inputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        // 加密
        return Base64.encodeBase64String(data);
    }

    /**
     * @param imgStr base64编码字符串
     * @param path   图片路径
     * @Method base64StrToImage
     * @Author lofxve
     * @Description base64编码字符串转换为图片
     * @Date 2021/4/21 9:38
     * @Return boolean
     */
    public static boolean base64StrToImage(String imgStr, String path) {
        if (imgStr == null) {
            return false;
        }
        Base64 decoder = new Base64();
        try {
            // 解密
            byte[] b = decoder.decode(imgStr);
            // 处理数据
            for (int i = 0; i < b.length; ++i) {
                if (b[i] < 0) {
                    b[i] += 256;
                }
            }
            //文件夹不存在则自动创建
            File tempFile = new File(path);
            if (!tempFile.getParentFile().exists()) {
                tempFile.getParentFile().mkdirs();
            }
            OutputStream out = new FileOutputStream(tempFile);
            out.write(b);
            out.flush();
            out.close();
            return true;
        } catch (Exception e) {
            return false;
        }
    }

    /**
     * @param base64Str
     * @Method base64String2ByteFun
     * @Author lofxve
     * @Description base64字符串转byte[]
     * @Date 2021/4/21 17:23
     * @Return byte[]
     */
    public static byte[] base64String2ByteFun(String base64Str) {
        return Base64.decodeBase64(base64Str);
    }

    /**
     * @param b
     * @Method byte2Base64StringFun
     * @Author lofxve
     * @Description byte[]转base64
     * @Date 2021/4/21 17:23
     * @Return java.lang.String
     */
    public static String byte2Base64StringFun(byte[] b) {
        return Base64.encodeBase64String(b);
    }

    /**
     * @param b byte数组
     * @param path
     * @Method base64StrToImage
     * @Author lofxve
     * @Description
     * @Date 2021/4/21 11:36
     * @Return boolean
     */
    public static boolean byteToImage(byte[] b, String path) {
        try {
            // 处理数据
            for (int i = 0; i < b.length; ++i) {
                if (b[i] < 0) {
                    b[i] += 256;
                }
            }
            //文件夹不存在则自动创建
            File tempFile = new File(path);
            if (!tempFile.getParentFile().exists()) {
                tempFile.getParentFile().mkdirs();
            }
            OutputStream out = new FileOutputStream(tempFile);
            out.write(b);
            out.flush();
            out.close();
            return true;
        } catch (Exception e) {
            return false;
        }
    }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SpringBoot项目中集成阿里云OSS工具类并集成MyBatis,可以按照以下步骤进行操作: 1. 首先,创建一个SpringBoot项目,并引入阿里云和MyBatis的相关依赖。可以在pom.xml文件中添加以下依赖: ``` <!-- 阿里云OSS --> <dependency> <groupId>com.aliyun.oss</groupId> <artifactId>aliyun-sdk-oss</artifactId> <version>3.13.1</version> </dependency> <!-- MyBatis --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.2.0</version> </dependency> ``` 2. 在application.properties文件中配置阿里云OSS的相关信息,包括AccessKey、SecretKey、Endpoint等。可以参考阿里云官方文档或者\[1\]中的示例进行配置。 3. 创建一个OSS工具类,用于封装OSS上传下载等操作。可以参考阿里云官方文档或者\[1\]中的示例进行编写。 4. 配置MyBatis的相关信息,包括数据库连接信息、Mapper扫描路径等。可以参考MyBatis官方文档或者\[3\]中的示例进行配置。 5. 编写业务代码,使用OSS工具类进行文件上传下载等操作,并结合MyBatis进行数据库操作。 需要注意的是,以上步骤只是一个简单的示例,具体的实现方式可能会因项目需求而有所不同。建议参考官方文档和示例进行详细的配置和编码。 希望以上信息对您有所帮助! #### 引用[.reference_title] - *1* *2* [SpringBoot集成阿里云存储OSS服务](https://blog.csdn.net/weixin_47316183/article/details/124512424)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v4^insert_chatgpt"}} ] [.reference_item] - *3* [springboot 整合阿里云oss](https://blog.csdn.net/congge_study/article/details/124356236)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v4^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值