java实现上传文件到阿里云oss

本文讲解的是java如何实现上传文件到oss中去,并通过代码设置上传文件的属性是私有还是公开,是在线预览还是文件下载,闲言少叙,码归正传
1、我们得先开通阿里云的oss服务,这个在这里就不叙说了,有感兴趣的小伙伴自行百度。
2、接入oss服务
2.1 pom依赖

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

2、yam中阿里云服务配置,这里的id和secret可以使用子用户的Accesskey,限制使用者的使用范围

aliyun:
  oss:
    endpoint: oss-cn-chengdu.aliyuncs.com
    keyId: xxxx
    keySecret: xxxx
    bucketName: xxxxx

3、编写上传代码,上传文件的方式有很多种,本文使用流文件上传

3.1获取配置信息

/**
 * oss配置信息
 */
@Component
@ConfigurationProperties("aliyun.oss")
public class OssProperties {
    /**
     * 填写Bucket所在地域对应的Endpoint
     */
    private String endpoint;
    /**
     * AccessKey的id
     */
    private String keyId;
    /**
     * AccessKey的密钥
     */
    private String keySecret;
    /**
     * 阿里云储存文件的Bucket名称
     */
    private String bucketName;

    public String getEndpoint() {
        return endpoint;
    }

    public void setEndpoint(String endpoint) {
        this.endpoint = endpoint;
    }

    public String getKeyId() {
        return keyId;
    }

    public void setKeyId(String keyId) {
        this.keyId = keyId;
    }

    public String getKeySecret() {
        return keySecret;
    }

    public void setKeySecret(String keySecret) {
        this.keySecret = keySecret;
    }

    public String getBucketName() {
        return bucketName;
    }

    public void setBucketName(String bucketName) {
        this.bucketName = bucketName;
    }
}

3.2编写上传逻辑,下面通过请求传入的参数判断上传的文件权限是私有还是公开,以及区分获取两种方式的文件地址

import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import java.io.InputStream;
import java.net.URL;

public class Demo {
	@Resource
    private OssProperties ossProperties;
 /**
     * 上传文件
     *
     * @param inputStream      上传的文件
     * @param module           oss目录
     * @param originalFilename 文件名称
     * @param fileType         文件类型 private 私有,public 共有
     * @return
     */
    public Map upload(InputStream inputStream, String module, String originalFilename, String fileType) {
        /**
         * 获取oss的属性
         */
        String endpoint = ossProperties.getEndpoint();
        String accessKeyId = ossProperties.getKeyId();
        String accessKeySecret = ossProperties.getKeySecret();
        String bucketName = ossProperties.getBucketName();
        String objectName = "";
        Map<String, Object> map = new HashMap<>();

        // 创建上传文件的元信息,可以通过文件元信息设置HTTP header。
        ObjectMetadata meta = new ObjectMetadata();
        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        try {
            String folder = new DateTime().toString("yyyy/MM/dd");
            // 文件名
            String fileName = UUID.randomUUID().toString();
            //文件扩展名
            String fileExtention = originalFilename.substring(originalFilename.lastIndexOf("."));
            if (StringUtils.isNotEmpty(module)) {
                //最终的路径 类似avatar/2021/12/05/xxxxxxxxx.jpg
                objectName = module + "/" + folder + "/" + fileName + fileExtention;
            } else {
                objectName = folder + "/" + fileName + fileExtention;
            }
            meta.setContentType("text/plain");
            meta.setContentDisposition("inline");

            // 设置存储空间的读写权限。例如将examplebucket的读写权限ACL设置为私有Private。
//            ossClient.setBucketAcl(bucketName, CannedAccessControlList.Private);
            if ("private".equals(fileType)) {
                //将文件访问读写权限设置为私有
                meta.setObjectAcl(CannedAccessControlList.Private);
                // 上传文件
                ossClient.putObject(bucketName, objectName, inputStream, meta);
                // 设置签名URL过期时间,单位为毫秒。
                Date expiration = new Date(new Date().getTime() + 3600 * 1000);
                // 生成以GET方法访问的签名URL,访客可以直接通过浏览器访问相关内容。
                String url = ossClient.generatePresignedUrl(bucketName, objectName, expiration).toString();
                map.put("fileUrl", url);
                return map;
            }
            // 上传文件
            ossClient.putObject(bucketName, objectName, inputStream, meta);
            //https://rxt.oss-cn-beijing.aliyuncs.com/avatar/01.jpeg
            endpoint = endpoint.split("//")[1];
            map.put("fileUrl", "https://" + bucketName + "." + endpoint + "/" + objectName);
            return map;
        } catch (OSSException oe) {
            throw new ServiceException(oe.getMessage());
        } catch (ClientException ce) {
            throw new ServiceException(ce.getMessage());
        } finally {
            if (ossClient != null) {
                // 关闭OSSClient。
                ossClient.shutdown();
            }
        }
    }
}                    

好了oss上传文件逻辑就是这么简单。这些东西在官方文档中都能够找到。希望能够帮助到大家

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
上传文件阿里云OSS可以通过以下步骤实现: 1. 引入aliyun-java-sdk-oss依赖 ``` <dependency> <groupId>com.aliyun.oss</groupId> <artifactId>aliyun-java-sdk-oss</artifactId> <version>3.10.0</version> </dependency> ``` 2. 创建OSSClient对象 ``` String endpoint = "http://oss-cn-hangzhou.aliyuncs.com"; String accessKeyId = "yourAccessKeyId"; String accessKeySecret = "yourAccessKeySecret"; String bucketName = "yourBucketName"; OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); ``` 3. 上传文件 ``` String objectName = "yourObjectName"; // 上传到OSS后的文件名,可以包含路径 File file = new File("yourLocalFile"); // 要上传的文件路径 ossClient.putObject(bucketName, objectName, file); ``` 4. 关闭OSSClient对象 ``` ossClient.shutdown(); ``` 完整的Java代码示例: ``` import com.aliyun.oss.OSS; import com.aliyun.oss.OSSClientBuilder; import java.io.File; public class OSSUploader { public static void main(String[] args) { String endpoint = "http://oss-cn-hangzhou.aliyuncs.com"; String accessKeyId = "yourAccessKeyId"; String accessKeySecret = "yourAccessKeySecret"; String bucketName = "yourBucketName"; String objectName = "yourObjectName"; // 上传到OSS后的文件名,可以包含路径 File file = new File("yourLocalFile"); // 要上传的文件路径 // 创建OSSClient对象 OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); // 上传文件 ossClient.putObject(bucketName, objectName, file); // 关闭OSSClient对象 ossClient.shutdown(); } } ``` 需要注意的是,上传文件时可以指定上传后的文件名,也可以使用原文件名。同时,上传文件的大小不能超过OSS的限制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值