阿里云OSS 文件上传下载工具类

本文介绍了一个用于操作阿里云OSS服务的工具类,包括文件上传、下载、删除等功能,并提供了创建及设置Bucket权限的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSSClient;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.Bucket;
import com.aliyun.oss.model.CannedAccessControlList;
import com.aliyun.oss.model.GetObjectRequest;
import com.aliyun.oss.model.OSSObjectSummary;
import com.aliyun.oss.model.ObjectListing;
import com.aliyun.oss.model.ObjectMetadata;
import com.aliyun.oss.model.PutObjectResult;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.net.URL;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**

  • @describe: 文件上传下载到OSS的工具类

  • @author:houkai

  • @Date: 2018/3/7 14:54

  • @version 1.0
    */
    public class OSSUtil {

    private static final String SLANT = “/”;
    private static final String DOT = “.”;
    public static final String ETag = “ETag”;
    public static final String OSSFilePathName = “OSSFilePathName”;
    /**

    • 上传文件到OSS服务器
    • @param client OSSClient
    • @param file 原文件
    • @param bucketName bucket名称
    • @param ossFilePath oss文件路径
    • @param ossFileName oss文件名(文件名未包含拓展名)
    • @return result 出参Map中包含两个参数:
    •            ETag 返回的MD5Key
      
    •            OSSFilePathName OSS文件路径
      

    */
    public static Map<String, String> uploadFile (OSSClient client, File file, String bucketName, String ossFilePath, String ossFileName) {
    Map<String, String> result = new HashMap<>(2);
    InputStream in = new FileInputStream(file);
    if (file != null && file.exists()) {
    String oriFileName = file.getName();
    //截取拓展名;
    String fileExtension = oriFileName.substring(oriFileName.lastIndexOf(DOT));
    StringBuffer ossPath = new StringBuffer();
    ossPath.append(ossFilePath);
    if (!ossFilePath.endsWith(SLANT)) {
    ossPath.append(SLANT);
    }
    //拼接OSS文件路径
    ossPath.append(ossFileName);
    Long fileSize = file.length();
    ObjectMetadata metadata = new ObjectMetadata();
    metadata.setContentLength(in.available());
    metadata.setCacheControl(“no-cache”);
    metadata.setContentEncoding(“utf-8”);
    metadata.setHeader(“Pragma”, “no-cache”);
    metadata.setContentType(FileExtensionEnum.getContentTypeByExtension(fileExtension));
    metadata.setContentDisposition(“filename/filesize=” + ossFileName + “/” + fileSize + “Byte.”);
    PutObjectResult putResult = client.putObject(bucketName, ossPath.toString(), in, metadata);
    //MD5值
    result.put(ETag, putResult.getETag());
    //oss 文件路径 + 文件名 /test/test.png
    result.put(OSSFilePathName, ossPath.toString());
    }
    return result;
    }

    /**

    • 新建Bucket
    • @param client
    • @param bucketName
    • @return
      */
      public static final boolean addBucket(OSSClient client, String bucketName) {
      Bucket bucket = client.createBucket(bucketName);
      return bucketName.equals(bucket.getName());
      }

    /**

    • 下载文件
    • @param client OSSClient对象
    • @param bucketName Bucket名
    • @param ossFilePath 上传到OSS起的全路径名
    • @param filename 文件下载到本地保存的路径
    • @throws OSSException
    • @throws ClientException
      */
      public static void downloadFile(OSSClient client, String bucketName, String ossFilePath, String filename) {
      client.getObject(new GetObjectRequest(bucketName, ossFilePath), new File(filename));
      }

    /**

    • 删除一个Bucket和其中的Objects
    • @param client OSSClient对象
    • @param bucketName Bucket名
    • @throws OSSException
    • @throws ClientException
      */
      public static void deleteBucket(OSSClient client, String bucketName)throws OSSException, ClientException{
      ObjectListing objectListing = client.listObjects(bucketName);
      List listDeletes = objectListing.getObjectSummaries();
      for(int i = 0; i < listDeletes.size(); i++){
      String objectName = listDeletes.get(i).getKey();
      System.out.println("objectName = " + objectName);
      //如果不为空,先删除bucket下的文件
      client.deleteObject(bucketName, objectName);
      }
      client.deleteBucket(bucketName);
      }

    /**

    • 把Bucket设置成所有人可读
    • @param client OSSClient对象
    • @param bucketName Bucket名
    • @throws OSSException
    • @throws ClientException
      */
      public static void setBucketPublicReadable(OSSClient client, String bucketName)throws OSSException, ClientException{
      //创建bucket
      client.createBucket(bucketName);
      //设置bucket的访问权限, public-read-write权限
      client.setBucketAcl(bucketName, CannedAccessControlList.PublicRead);
      }

    /**

    • 获得url链接
    • @param path 文件路径
    • @param ossClient
    • @param bucketName
    • @return
      /
      public static String getUrl(String path, OSSClient ossClient, String bucketName, String activeTime) {
      // 设置URL过期时间为10年 3600l
      100024365*10
      long time = 5 * 60000;
      if (StringUtil.isNotBlank(activeTime)) {
      time = Long.parseLong(activeTime) * 60000;
      }
      Date expiration = new Date(System.currentTimeMillis() + time);
      // 生成URL
      URL url = ossClient.generatePresignedUrl(bucketName, path, expiration);
      if (url != null) {
      return url.toString();
      }
      return null;
      }
      }

工具类涉及的maven依赖

<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>2.8.3</version>
### 阿里云 OSS 文件上传 Java 工具类 为了实现阿里云 OSS文件上传功能,可以创建一个工具类 `AliOssUtil` 来封装上传逻辑。此工具类依赖于配置属性 `AliOssProperties` 中定义的参数。 #### 1. 配置属性 AliOssProperties.java 该用于读取并保存连接到阿里云 OSS 所需的关键信息: ```java package com.sky.properties; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; @Component @ConfigurationProperties(prefix = "sky.alioss") @Data public class AliOssProperties { private String endpoint; private String accessKeyId; private String accessKeySecret; private String bucketName; } ``` #### 2. 工具类 AliOssUtil.java 以下是完整的工具类代码示例,实现了基本的文件上传方法: ```java package com.sky.utils; import com.aliyun.oss.OSS; import com.aliyun.oss.OSSClientBuilder; import com.aliyun.oss.model.PutObjectRequest; import com.sky.properties.AliOssProperties; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.io.InputStream; @Component public class AliOssUtil { @Autowired private AliOssProperties aliOssProperties; /** * 将输入流中的数据作为新对象上传至指定bucket. */ public String uploadFile(InputStream inputStream, String fileName) { // 创建OSS实例 try (OSS ossClient = new OSSClientBuilder().build(aliOssProperties.getEndpoint(), aliOssProperties.getAccessKeyId(), aliOssProperties.getAccessKeySecret())) { PutObjectRequest putObjectRequest = new PutObjectRequest( aliOssProperties.getBucketName(), fileName, inputStream); // 上传文件 ossClient.putObject(putObjectRequest); // 返回访问路径 return "https://" + aliOssProperties.getBucketName() + "." + aliOssProperties.getEndpoint() + "/" + fileName; } } } ``` 上述代码展示了如何通过注入的方式获取必要的配置项,并利用这些配置来初始化 OSS 客户端以及执行具体的文件上传操作[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值