这是一篇 AI 生成的文章,仅用于测试!!!

对象存储服务(Object Storage Service,简称 OSS)是阿里云提供的海量、安全、低成本、高可靠的云存储服务。很多项目都会用它来存储图片、音视频、日志文件等。本文将介绍如何在 Java 项目中使用阿里云 OSS SDK 来上传文件。

一、准备工作

在开始之前,你需要完成以下准备:

  1. 开通 OSS 服务:在阿里云控制台中开通 OSS。

  2. 创建 Bucket:用于存储对象的容器,可以设置读写权限(私有/公共读/公共读写)。

  3. 获取 AccessKey:包括 AccessKeyIdAccessKeySecret

  4. 安装 JDK & Maven/Gradle:本文示例基于 Java 8+ 和 Maven。

二、引入依赖

pom.xml 中添加阿里云 OSS SDK 依赖:

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

如果你使用 Gradle,则添加:

implementation 'com.aliyun.oss:aliyun-sdk-oss:3.17.4'

三、初始化 OSS 客户端

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

public class OssClientUtil {
    // 你的Endpoint,例如:华东1(杭州)为 https://oss-cn-hangzhou.aliyuncs.com
    private static final String ENDPOINT = "https://oss-cn-hangzhou.aliyuncs.com";
    private static final String ACCESS_KEY_ID = "你的AccessKeyId";
    private static final String ACCESS_KEY_SECRET = "你的AccessKeySecret";
    private static final String BUCKET_NAME = "your-bucket-name";

    public static OSS getOssClient() {
        return new OSSClientBuilder().build(ENDPOINT, ACCESS_KEY_ID, ACCESS_KEY_SECRET);
    }
}

四、上传文件示例

1. 上传字符串内容

import com.aliyun.oss.OSS;
import java.io.ByteArrayInputStream;

public class UploadDemo {
    public static void main(String[] args) {
        OSS ossClient = OssClientUtil.getOssClient();
        try {
            String content = "Hello OSS";
            ossClient.putObject("your-bucket-name", "test/hello.txt",
                    new ByteArrayInputStream(content.getBytes()));
            System.out.println("上传字符串成功!");
        } finally {
            ossClient.shutdown();
        }
    }
}

2. 上传本地文件

import com.aliyun.oss.OSS;
import java.io.File;

public class UploadFileDemo {
    public static void main(String[] args) {
        OSS ossClient = OssClientUtil.getOssClient();
        try {
            String objectName = "upload/example.jpg"; // 上传后OSS中的路径
            String filePath = "D:\\local\\example.jpg"; // 本地文件路径

            ossClient.putObject("your-bucket-name", objectName, new File(filePath));
            System.out.println("上传文件成功!");
        } finally {
            ossClient.shutdown();
        }
    }
}

3. 上传输入流(适合 Web 上传)

import com.aliyun.oss.OSS;
import java.io.FileInputStream;

public class UploadStreamDemo {
    public static void main(String[] args) throws Exception {
        OSS ossClient = OssClientUtil.getOssClient();
        try (FileInputStream inputStream = new FileInputStream("D:\\local\\example.png")) {
            ossClient.putObject("your-bucket-name", "stream/example.png", inputStream);
            System.out.println("流式上传成功!");
        } finally {
            ossClient.shutdown();
        }
    }
}

五、常见问题

  1. 上传后访问不到?
    检查 Bucket 权限(私有/公共读)。如果是私有,需要通过 STS 签名 URL 访问。

  2. 大文件上传
    推荐使用 分片上传(Multipart Upload)来提升稳定性。

  3. 最佳实践

    • 不要在客户端暴露 AccessKey,建议使用后端签名或临时 STS。

    • 对于高并发场景,建议复用 OSSClient 实例。

更多高级用法(如分片上传、断点续传、签名 URL 生成),可参考官方文档:阿里云 OSS SDK for Java