对象存储服务(Object Storage Service,简称 OSS)是阿里云提供的海量、安全、低成本、高可靠的云存储服务。很多项目都会用它来存储图片、音视频、日志文件等。本文将介绍如何在 Java 项目中使用阿里云 OSS SDK 来上传文件。
一、准备工作
在开始之前,你需要完成以下准备:
开通 OSS 服务:在阿里云控制台中开通 OSS。
创建 Bucket:用于存储对象的容器,可以设置读写权限(私有/公共读/公共读写)。
获取 AccessKey:包括
AccessKeyId
和AccessKeySecret
。安装 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();
}
}
}
五、常见问题
上传后访问不到?
检查 Bucket 权限(私有/公共读)。如果是私有,需要通过 STS 签名 URL 访问。大文件上传
推荐使用 分片上传(Multipart Upload)来提升稳定性。最佳实践
不要在客户端暴露 AccessKey,建议使用后端签名或临时 STS。
对于高并发场景,建议复用
OSSClient
实例。
更多高级用法(如分片上传、断点续传、签名 URL 生成),可参考官方文档:阿里云 OSS SDK for Java