场景描述:不断接收数据,将数据写入文件存放到OSS
方案:
1、接收到文件后写到本地,定期或实时覆盖上传到OSS
2、OSS追加上传
只贴2代码:
public boolean writeFile(String content) {
// 创建OSSClient实例
OSSClient ossClient = new OSSClient(ossConfig.getEndPoint(), ossConfig.getAccessKeyId(), ossConfig.getAccessKeySecret());
try {
// 判断bucket是否存在
if (!ossClient.doesBucketExist(ossConfig.getBucketName())) {
ossClient.createBucket(ossConfig.getBucketName());// 创建Bucket
logger.info("Bucket {} 不存在,已创建。", ossConfig.getBucketName());
}
// 判断当日目录是否存在
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd");
Date today = new Date();
String todayDirectoryName = ossConfig.getDirectory() + simpleDateFormat.format(today) + "/";
if (!ossClient.doesObjectExist(ossConfig.getBucketName(), todayDirectoryName)) {
OSSUtil.createDirectory(ossClient, ossConfig.getBucketName(), todayDirectoryName);
logger.info("目录 {} 不存在,已创建。", todayDirectoryName);
}
InputStream inputStream = new ByteArrayInputStream(content.getBytes());
// 按规则生成文件名
String deviceFileName = todayDirectoryName + 文件名 + ".txt";
// 从OSS取文件,读其大小
Long position = OSSUtil.getRemoteFileSize(ossClient, ossConfig.getBucketName(), deviceFileName);
logger.debug("{} 写入位置 {}", deviceFileName, position);
// 创建上传Object的Metadata,如不声明则写入OSS中文会乱码
ObjectMetadata meta = new ObjectMetadata();
meta.setContentType("text/plain; charset=utf-8");
ossClient.appendObject(new AppendObjectRequest(ossConfig.getBucketName(), deviceFileName, inputStream, meta).withPosition(position));
return true;
} catch (Exception e) {
logger.error("OSS文件写入异常", e);
return false;
} finally {
ossClient.shutdown();
}
}
~~~~