阿里云 oss 上传工具类

本文档介绍了如何将阿里云OSS服务集成到项目中,包括在pom文件中添加依赖,配置accessKeyId和accessKeySecret等信息。通过提供的工具类,可以实现文件的上传、删除和获取文件流等功能,方便进行远程存储和管理。示例代码展示了文件上传至OSS的详细步骤,并提供了删除文件和获取文件外链的方法。
摘要由CSDN通过智能技术生成

2021SC@SDUSC

阿里云对象存储服务(Object Storage Service,简称OSS)为您提供基于网络的数据存取服务。使用OSS,您可以通过网络随时存储和调用包括文本、图片、音频和视频等在内的各种非结构化数据文件。

Oss支持任意类型的文件远程存储(文件类型包括但不仅限于图片,视频,文字),可以通过网络上传或下载分享,有着高性能,安全,稳定的特性。在本项目中用到了oss用于照片、视频等的远程存储。

进行OSS配置。

pom文件添加依赖:

        <dependency>
            <groupId>com.aliyun.oss</groupId>
            <artifactId>aliyun-sdk-oss</artifactId>
            <version>3.1.0</version>
        </dependency>

配置信息:

config.properties 配置文件信息,value值根据自己实际情况补充完整

# Aliyun Config
aliyun.oss.accessKeyId=
aliyun.oss.accessKeySecret=

# Aliyun OSS Config
aliyun.oss.endpoint=
aliyun.oss.bucketName=
aliyun.oss.folder=""

然后将工具类代码导入到项目中。(代码过长就不copy过来了,在阿里云OSS中可以查到)

实用工具类上传文件

 OSSClient ossclient = OSSClientUtil.getOSSClient();
  
  //提供相应类型的参数    
 OSSClientUtil.uploadObject2OSS(ossclient, toFile, OSSClientUtil.bucketName, inputPosition);
   

上传文件至阿里云OSS,文件上传成功,返回文件完整访问路径,文件上传失败则返回null。

其中file表示带上传文件,fileDir代表文件保存目录,最后返回oss中的相对文件路径。

public class OssBootUtil {

    private static String endPoint;
    private static String accessKeyId;
    private static String accessKeySecret;
    private static String bucketName;
    private static String staticDomain;

   
 
    public static String upload(MultipartFile file, String fileDir,String customBucket) {
        String FILE_URL = null;
        initOSS(endPoint, accessKeyId, accessKeySecret);
        StringBuilder fileUrl = new StringBuilder();
        String newBucket = bucketName;
        if(oConvertUtils.isNotEmpty(customBucket)){
            newBucket = customBucket;
        }
        try {
            //判断桶是否存在,不存在则创建桶
            if(!ossClient.doesBucketExist(newBucket)){
                ossClient.createBucket(newBucket);
            }
            // 获取文件名
            String orgName = file.getOriginalFilename();
            if("" == orgName){
              orgName=file.getName();
            }
            orgName = CommonUtils.getFileName(orgName);
            String fileName = orgName.substring(0, orgName.lastIndexOf(".")) + "_" + System.currentTimeMillis() + orgName.substring(orgName.indexOf("."));
            if (!fileDir.endsWith("/")) {
                fileDir = fileDir.concat("/");
            }
            fileUrl = fileUrl.append(fileDir + fileName);

            if (oConvertUtils.isNotEmpty(staticDomain) && staticDomain.toLowerCase().startsWith("http")) {
                FILE_URL = staticDomain + "/" + fileUrl;
            } else {
                FILE_URL = "https://" + newBucket + "." + endPoint + "/" + fileUrl;
            }
            PutObjectResult result = ossClient.putObject(newBucket, fileUrl.toString(), file.getInputStream());
            // 设置权限(公开读)
//            ossClient.setBucketAcl(newBucket, CannedAccessControlList.PublicRead);
            if (result != null) {
                log.info("------OSS文件上传成功------" + fileUrl);
            }
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
        return FILE_URL;
    }

    /**
     * 文件上传
     * @param file
     * @param fileDir
     * @return
     */
    public static String upload(MultipartFile file, String fileDir) {
        return upload(file, fileDir,null);
    }

删除文件函数

  public static void deleteUrl(String url) {
        deleteUrl(url,null);
    }
public static void deleteUrl(String url,String bucket) {
        String newBucket = bucketName;
        if(oConvertUtils.isNotEmpty(bucket)){
            newBucket = bucket;
        }
        String bucketUrl = "";
        if (oConvertUtils.isNotEmpty(staticDomain) && staticDomain.toLowerCase().startsWith("http")) {
            bucketUrl = staticDomain + "/" ;
        } else {
            bucketUrl = "https://" + newBucket + "." + endPoint + "/";
        }
        url = url.replace(bucketUrl,"");
        ossClient.deleteObject(newBucket, url);
    }

获取文件流

  public static InputStream getOssFile(String objectName){
        return getOssFile(objectName,null);
    }

获取文件外链

public static String getObjectURL(String bucketName, String objectName, Date expires) {
        initOSS(endPoint, accessKeyId, accessKeySecret);
        try{
            if(ossClient.doesObjectExist(bucketName,objectName)){
                URL url = ossClient.generatePresignedUrl(bucketName,objectName,expires);
                return URLDecoder.decode(url.toString(),"UTF-8");
            }
        }catch (Exception e){
            log.info("文件路径获取失败" + e.getMessage());
        }
        return null;
    }

这里提供一个 Java 版本的阿里云 OSS 工具类,方便上传、下载、删除等操作。 ```java import com.aliyun.oss.ClientConfiguration; import com.aliyun.oss.OSS; import com.aliyun.oss.OSSClientBuilder; import com.aliyun.oss.model.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.*; import java.net.URL; import java.util.Date; import java.util.List; /** * 阿里云 OSS 工具类 */ public class AliyunOSSUtil { private static final Logger LOGGER = LoggerFactory.getLogger(AliyunOSSUtil.class); private static OSS ossClient; /** * 初始化 OSS 客户端 * * @param endpoint OSS 服务的 endpoint * @param accessKeyId 访问 OSS 服务的 accessKeyId * @param accessKeySecret 访问 OSS 服务的 accessKeySecret */ public static void initOSSClient(String endpoint, String accessKeyId, String accessKeySecret) { ClientConfiguration config = new ClientConfiguration(); config.setConnectionTimeout(5000); // 设置连接超时时间,默认50000毫秒 config.setMaxErrorRetry(3); // 设置请求失败后最大重试次数,默认3次 ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret, config); } /** * 销毁 OSS 客户端 */ public static void destroyOSSClient() { if (ossClient != null) { ossClient.shutdown(); } } /** * 上传文件到 OSS * * @param bucketName OSS bucket 名称 * @param filePath 本地文件路径 * @param objectName OSS 上的文件名称 * @return 文件 URL */ public static String uploadFile(String bucketName, String filePath, String objectName) { try { // 创建 PutObjectRequest 对象 PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, new File(filePath)); // 如果需要上传时设置存储类型与访问权限,请参考以下示例代码。 // ObjectMetadata metadata = new ObjectMetadata(); // metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS, StorageClass.Standard.toString()); // metadata.setObjectAcl(CannedAccessControlList.Private); // putObjectRequest.setMetadata(metadata); // 上传文件 ossClient.putObject(putObjectRequest); // 获取文件 URL Date expiration = new Date(System.currentTimeMillis() + 3600 * 1000); // 设置 URL 过期时间为 1 小时 URL url = ossClient.generatePresignedUrl(bucketName, objectName, expiration); LOGGER.info("Upload file to OSS success, object name: {}, URL: {}", objectName, url); return url.toString(); } catch (Exception e) { LOGGER.error("Upload file to OSS failed, object name: {}", objectName, e); return null; } } /** * 下载 OSS 上的文件 * * @param bucketName OSS bucket 名称 * @param objectName OSS 上的文件名称 * @param localPath 本地存储路径 */ public static void downloadFile(String bucketName, String objectName, String localPath) { try { // 下载文件 OSSObject ossObject = ossClient.getObject(bucketName, objectName); InputStream inputStream = ossObject.getObjectContent(); OutputStream outputStream = new FileOutputStream(localPath); byte[] buffer = new byte[1024]; int len; while ((len = inputStream.read(buffer)) != -1) { outputStream.write(buffer, 0, len); } outputStream.close(); inputStream.close(); LOGGER.info("Download file from OSS success, object name: {}, local path: {}", objectName, localPath); } catch (Exception e) { LOGGER.error("Download file from OSS failed, object name: {}", objectName, e); } } /** * 判断 OSS 上是否存在指定文件 * * @param bucketName OSS bucket 名称 * @param objectName OSS 上的文件名称 * @return true:存在,false:不存在 */ public static boolean isExist(String bucketName, String objectName) { try { return ossClient.doesObjectExist(bucketName, objectName); } catch (Exception e) { LOGGER.error("Check object exist failed, object name: {}", objectName, e); return false; } } /** * 删除 OSS 上的文件 * * @param bucketName OSS bucket 名称 * @param objectName OSS 上的文件名称 */ public static void deleteFile(String bucketName, String objectName) { try { ossClient.deleteObject(bucketName, objectName); LOGGER.info("Delete file from OSS success, object name: {}", objectName); } catch (Exception e) { LOGGER.error("Delete file from OSS failed, object name: {}", objectName, e); } } /** * 列举 OSS bucket 中的所有文件 * * @param bucketName OSS bucket 名称 * @return 文件列表 */ public static List<OSSObjectSummary> listObjects(String bucketName) { try { ObjectListing objectListing = ossClient.listObjects(bucketName); return objectListing.getObjectSummaries(); } catch (Exception e) { LOGGER.error("List objects failed, bucket name: {}", bucketName, e); return null; } } } ``` 使用方法: ```java // 初始化 OSS 客户端 AliyunOSSUtil.initOSSClient("your endpoint", "your accessKeyId", "your accessKeySecret"); // 上传文件 String fileUrl = AliyunOSSUtil.uploadFile("your bucket name", "your local file path", "your object name"); // 下载文件 AliyunOSSUtil.downloadFile("your bucket name", "your object name", "your local path"); // 判断文件是否存在 boolean isExist = AliyunOSSUtil.isExist("your bucket name", "your object name"); // 删除文件 AliyunOSSUtil.deleteFile("your bucket name", "your object name"); // 列举 bucket 中的所有文件 List<OSSObjectSummary> objectSummaries = AliyunOSSUtil.listObjects("your bucket name"); // 销毁 OSS 客户端 AliyunOSSUtil.destroyOSSClient(); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值