用java设计一个文件上传下载oss的工具类
时间: 2024-05-14 20:18:52 浏览: 19
以下是一个简单的 Java 工具类,用于上传和下载文件到阿里云 OSS。
```java
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.GetObjectRequest;
import com.aliyun.oss.model.ObjectMetadata;
import com.aliyun.oss.model.PutObjectRequest;
import com.aliyun.oss.model.PutObjectResult;
import java.io.File;
import java.io.InputStream;
public class OssUtils {
private static final String ACCESS_KEY_ID = "your_access_key_id";
private static final String ACCESS_KEY_SECRET = "your_access_key_secret";
private static final String ENDPOINT = "your_oss_endpoint";
private static final String BUCKET_NAME = "your_bucket_name";
private static final OSS ossClient = new OSSClientBuilder().build(ENDPOINT, ACCESS_KEY_ID, ACCESS_KEY_SECRET);
/**
* 上传文件到 OSS
*
* @param key 文件在 OSS 中的唯一标识
* @param file 要上传的文件
* @param metadata 文件元数据
* @return 文件在 OSS 中的 URL
*/
public static String upload(String key, File file, ObjectMetadata metadata) {
PutObjectRequest request = new PutObjectRequest(BUCKET_NAME, key, file);
if (metadata != null) {
request.setMetadata(metadata);
}
PutObjectResult result = ossClient.putObject(request);
return ossClient.generatePresignedUrl(BUCKET_NAME, key, null).toString();
}
/**
* 从 OSS 下载文件
*
* @param key 文件在 OSS 中的唯一标识
* @return 文件流
*/
public static InputStream download(String key) {
GetObjectRequest request = new GetObjectRequest(BUCKET_NAME, key);
return ossClient.getObject(request).getObjectContent();
}
}
```
上述代码中,我们使用了阿里云 OSS Java SDK 提供的 `OSS` 类来上传和下载文件。首先,我们需要在阿里云控制台中创建一个 OSS 存储空间,并获取其访问密钥 ID 和访问密钥 Secret,以及 OSS 的 Endpoint 和 Bucket 名称。这些参数需要填写到代码中的常量中。
`upload` 方法用于上传文件到 OSS。我们使用 `PutObjectRequest` 类来指定要上传的文件和文件在 OSS 中的唯一标识。如果需要为文件设置元数据,可以使用 `ObjectMetadata` 类来指定。最后,我们使用 `ossClient.putObject` 方法上传文件,并使用 `ossClient.generatePresignedUrl` 方法生成文件在 OSS 中的 URL。
`download` 方法用于从 OSS 下载文件。我们使用 `GetObjectRequest` 类来指定要下载的文件在 OSS 中的唯一标识,然后使用 `ossClient.getObject` 方法获取文件流。
需要注意的是,在使用完 `OSS` 类后,应该及时调用其 `shutdown` 方法关闭连接,以释放资源。
```java
ossClient.shutdown();
```