OSS简单实现文件上传

本文介绍了如何使用Java整合阿里云OSS服务进行文件上传。首先,详细解释了OSS中的Endpoint、Bucket和Object等核心概念,接着讲述了添加依赖、修改配置文件的步骤,并提供了Spring配置示例。在代码实现部分,展示了使用PutObject方法进行简单上传,以及创建OSSClient、获取文件外链和删除OSS文件的方法。


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

OSS中相关概念

Endpoint:访问域名,通过该域名可以访问OSS服务的API,进行文件上传、下载等操作。
Bucket:存储空间,是存储对象的容器,所有存储对象都必须隶属于某个存储空间。
Object:对象,对象是 OSS存储数据的基本单元,也被称为 OSS 的文件。
AccessKey:访问密钥,指的是访问身份验证中用到的AccessKeyId 和 AccessKeySecret。

整合OSS实现文件上传

一、添加依赖

<!-- OSS SDK 相关依赖 -->
<dependency>
    <groupId>com.aliyun.oss</groupId>
    <artifactId>aliyun-sdk-oss</artifactId>
    <version>3.8.0</version>
</dependency>

二、修改配置文件

aliyun:
  oss:
    endpoint: xtslife-oss.oss-cn-chengdu.aliyuncs.com # oss对外服务的访问域名
    accessKeyId: test # 访问身份验证中用到用户标识
    accessKeySecret: test # 用户用于加密签名字符串和oss用来验证签名字符串的密钥
    bucketName: xtslife-oss # oss的存储空间
    policy:
      expire: 300 # 签名有效期(S)
    maxSize: 10 # 上传文件大小(M)
    callback: http://localhost:8080/aliyun/oss/callback # 文件上传成功后的回调地址
    dir:
      prefix: xtslife/images/ # 上传文件夹路径前缀

注意
1、endpoint、accessKeyId、accessKeySecret、bucketName、callback、prefix都要改为你自己帐号OSS相关的,callback需要是公网可以访问的地址。
2、web文件上传大小受spring.servlet.multipart.max-file-size和spring.servlet.multipart.max-request-size配置影响。

Spring配置

spring:
  # 资源信息
  messages:
    # 国际化资源文件路径
    basename: i18n/messages
  profiles: 
    active: dev
  # 文件上传
  servlet:
     multipart:
       # 单个文件大小
       max-file-size:  50MB
       # 设置总上传的文件大小
       max-request-size:  100MB

三、代码实现

1、文件上传

本次使用的是PutObject方法来上传单个文件(Object),属于OSS上传方式中的简单上传。简单上传适用于一次HTTP请求交互即可完成上传的场景,例如小文件(小于5 GB)的上传。

	/**
     * 文件上传
     * @param file
     * @return
     */
    public Map<String, Object> uploadFile (@Nullable MultipartFile file) {
        Map<String, Object> map = new HashMap<>();
        String fileExt = FileUtil.extName(file.getOriginalFilename());
        SimpleDateFormat sm = new SimpleDateFormat("yyyy/MM");
        String today = sm.format(new Date());
        String fileKey = BASE_FILE_PATH + "/" + today +"/"+getCurrentDate()+"."+fileExt;
        OSSClient ossClient = getOssClient();
        try {
            // 文件存储入OSS,Object的名称为fileKey。详细请参看“SDK手册 > Java-SDK > 上传文件”。
            // 链接地址是:https://help.aliyun.com/document_detail/oss/sdk/java-sdk/upload_object.html?spm=5176.docoss/user_guide/upload_object
            ossClient.putObject(bucketName, fileKey, file.getInputStream());
            log.info("上传文件:" + fileKey + "存入OSS成功。");
        } catch (Exception e) {
            log.warn("上传文件异常,errMsg = {}", e);
        } finally {
            ossClient.shutdown();
        }
        map.put("fileUrl",fileKey);
        map.put("url",getUrl(fileKey,ossClient));
        return map;
    }

2、创建OSSClient实例
在此处可通过ClientConfiguration配置OSS连接配置。

private OSSClient getOssClient() {
    return new OSSClient(endpoint, 
    	new DefaultCredentialProvider(accessKeyId,secretAccessKey),
    	new ClientConfiguration());
}

3、获取URL
如果想通过链接访问你保存的文件,可使用以下方法生成外链

private String getUrl(String fileKey, OSSClient ossClient) {
    // 设置URL过期时间为10年 3600l* 1000*24*365*10
    Date expiration = new Date(System.currentTimeMillis() + 3600L * 1000 * 24 * 365 * 10);

    // 生成URL
    URL url = ossClient.generatePresignedUrl(bucketName, fileKey, expiration);
    if (url != null) {
        log.info(fileKey + "生成的访问路径为:"+ url);
        return url.toString();
    }
    return null;
}

4、删除OSS文件
如果你想删除OSS上保存的文件,可通过deleteObject方法来删除,在此方法上必要条件是保存时的文件内部路径。

public void deleteFile (String fileKey) {
        OSSClient ossClient = getOssClient();
        try {
            // 删除Object。详细请参看“SDK手册 > Java-SDK > 管理文件”。
            // 链接地址是:https://help.aliyun.com/document_detail/oss/sdk/java-sdk/manage_object.html?spm=5176.docoss/sdk/java-sdk/manage_bucket
            ossClient.deleteObject(bucketName, fileKey);
            log.info("删除文件:" + fileKey + "删除OSS成功。");
        } catch (Exception e) {
            log.warn("删除文件异常,errMsg = {}", e);
        } finally {
            ossClient.shutdown();
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值