开通并部署 OSS
相关依赖:
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>2.8.3</version>
</dependency>
找到开发相关的信息:
获取 accessKeyId ,accessKeySecret
获取 bucketName ,选择指定的 Bucket 列表,复制名称就行了
## 获取 endpoint , 点击指定的 Bucket ,地域不同的 Bucket 的 endpoint 是不一样的
OSS上传工具类:
package com.b2bwings.datacoreservice.common.util;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClient;
import com.aliyun.oss.model.*;
import org.springframework.util.CollectionUtils;
import java.io.BufferedReader;
import java.io.File;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class utils {
public static final String endpoint = "xxxxxxxxxxxxxxxxxxxxxxxx";
public static final String accessKeyId = "xxxxxxxxxxxxxxxxxxxxxxxx";
public static final String accessKeySecret = "xxxxxxxxxxxxxxxxxxxxxxxx";
public static final String bucketName = "xxxxxxxxxxxxxxxxxxxxxxxx";
public static OSS ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
public static void main(String[] args) throws Exception {
String fileName = "code.zip[rsong].1575342717.zip";
String folderName = "dev/";
String path = "C:\\Users\\wuxin\\Desktop\\OSS\\";
uploadFile(fileName, folderName, path);
System.out.println("上传文件完成。");
}
/**
* 上传文件
* @param fileName 上传的文件名
* @param folderName 上传到哪个文件夹
* @param path 准备上传的文件的路径
*/
public static void uploadFile(String fileName, String folderName, String path) throws Exception {
PutObjectResult result = ossClient.putObject(bucketName, folderName + fileName, new File(path + fileName));
String eTag = result.getETag();
String requestId = result.getRequestId();
ossClient.shutdown();
}
public static void uploadAllFile(List<String> allFile, String folderName, String path) throws Exception {
if (!CollectionUtils.isEmpty(allFile)) {
for (String fileName : allFile) {
ossClient.putObject(bucketName, folderName + fileName, new File(path + fileName));
// 上传成功 记录
}
}
ossClient.shutdown();
System.out.println("全部文件上传完成!");
}
/**
* 获取指定目录下的所有文件
*
* @param directoryName 指定目录 dev/
* @return
*/
public static List<String> getAllFilesBySpecifyDirectory(String directoryName) {
List<String> list = new ArrayList<>();
ListObjectsRequest listObjectsRequest = new ListObjectsRequest(bucketName);
listObjectsRequest.setPrefix(directoryName); //指定下一级文件
listObjectsRequest.setDelimiter("/");//跳出递归循环,只去指定目录下的文件。使用它时 Prefix文件路径要以“/”结尾
ObjectListing listing = ossClient.listObjects(listObjectsRequest);
List<OSSObjectSummary> objectSummaries = listing.getObjectSummaries();
for (OSSObjectSummary summary : objectSummaries) {
// 获取文件名
// key = dev/code.zip[rsong].1575342717.zip
String key = summary.getKey();
list.add(key);
}
// 关闭OSSClient
ossClient.shutdown();
System.out.println("查询文件完成!");
return list;
}
// 流式下载
public static List<String> streamDownload(String uri) throws Exception {
// ossObject包含文件所在的存储空间名称、文件名称、文件元信息以及一个输入流。
OSSObject ossObject = ossClient.getObject(bucketName, uri);
// 读取文件内容。
System.out.println("Object content:");
BufferedReader reader = new BufferedReader(new InputStreamReader(ossObject.getObjectContent(), "GBK"));
List<String> list = reader.lines().collect(Collectors.toList());
// while (true) {
// String line = reader.readLine();
// if (line == null) break;
// list.add(line);
// }
// 数据读取完成后,获取的流必须关闭,否则会造成连接泄漏,导致请求无连接可用,程序无法正常工作。
reader.close();
// 关闭OSSClient。
ossClient.shutdown();
return list;
}
}
测试结果: