文章目录
-
-
- 前言
- 正文
-
- 1. 全路径下载(网页访问)
-
- 1.1 桶权限设置
- 1.2 全路径示例
- 1.3 网页访问url
- 1.4 桶限制问题
- 2. 代码下载
-
- 2.1 OSS服务器下载文件流
- 2.2 通过`EasyExcel`读取文件
- 2.3 文件读取错误
- 2.4 结果
- 结尾
-
前言
在下载OSS服务器文件的前提条件是配置好了OSS的服务器上传等一系列的配置设置.
依托于《导出记录xls_or_csv文件.md》的4. OSS
我们通常需要从OSS服务上面下载到那我们上传的文件,在下载你方式上面,以下提供了几种下载的途径.
结尾处放置代码.
正文
1. 全路径下载(网页访问)
1.1 桶权限设置
关于Bucket桶的读写权限设置有关于三个: 私有,公共读,公共读写
在未对Bucket进行设置限制的前提情况下,可以通过全路径进行文件的下载
1.2 全路径示例
Bucket桶域名 + 文件夹 + 文件名
https://game-information-console.oss-cn-shenzhen.aliyuncs.com/dev/temporary/game-information-console_486085603664.csv
不包含桶名称的路径 dev/temporary/game-information-console_486085603664.csv
1.3 网页访问url
可以直接在网页直接搜索全域名直接下载文件
1.4 桶限制问题
如果显示这样子的网页限制
说明Bucket的桶读写权限被限制了(私有).
将其设置为公共读,即可直接通过url进行文件下载,不太建议直接设置成公共读写,权限太大了会直接影响到整个OSS的桶数据
2. 代码下载
2.1 OSS服务器下载文件流
2.2 通过EasyExcel读取文件
定义监听,通过EasyExcel的read读取文件流,然后获取数据列表.
2.3 文件读取错误
文件运行发生错误,提示需要指定类型.
Convert excel format exception.You can try specifying the ‘excelType‘ yourself
添加读取的指定类型
.excelType(ExcelTypeEnum.CSV)
代码如下
2.4 结果
结尾
结尾处放置代码文件
OSS下载代码
/**
* 下载代码
* @param endpoint 创建的桶的EndPoint域名地址
* @param bucket 桶名称
* @param fileUrl 文件的路径 不包含Bucket名称
* @return 返回文件流
*/
private InputStream downLoad(String endpoint, String bucket, String fileUrl){
//访问凭证
CredentialsProvider credentialsProvider = new DefaultCredentialProvider(accessKey, accessKeySecret);
OSS ossClient = null;
InputStream inputStream;
try {
ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);
//dev/temporary/game-information-console_486085603664.csv
OSSObject ossObject = ossClient.getObject(bucket, fileUrl);
inputStream = ossObject.getObjectContent();
} catch (Exception oe) {
log.error("oss downLoad error, ", oe);
throw new RuntimeException("文件流下载失败!");
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
return inputStream;
}
ExcelEasy读取代码
@Resource
private OSSDomainEvent ossDomainEvent;
@Transactional
public void readFile(String fileUrl) {
long start = System.currentTimeMillis();
//excel文件的读取监听
ReadExcelDataToListListener<SyncBalance> listListener = new ReadExcelDataToListListener<>();
try {
//OSS读取的文件流
InputStream inputStream = ossDomainEvent.downLoadOSSInputStream(fileUrl);
EasyExcel.read(inputStream, SyncBalance.class,listListener)
.excelType(ExcelTypeEnum.CSV)
.sheet()
.doRead();
inputStream.close();
} catch (Exception e) {
log.error("DownLoadOSSBiz readFile 读取文件发生异常 fileUrl:{}, e:{}", JSONObject.toJSONString(e));
throw new RuntimeException(e);
}
List<SyncBalance> list = listListener.getDataList();
List<SyncBalance> collect = list.stream().filter(ListUtil.distinctByKey(SyncBalance::getMobile)).collect(Collectors.toList());
if (list.size() != collect.size()) {
log.error("DownLoadOSSBiz readFile 读取文件发生异常 文件存在重复数据,退出同步 fileUrl:{}",
fileUrl);
return;
}
log.info("DownLoadOSSBiz readFile 读取完成 fileUrl:{} cost:{}ms", fileUrl , System.currentTimeMillis() – start);
}
return;
}
log.info("DownLoadOSSBiz readFile 读取完成 fileUrl:{} cost:{}ms", fileUrl , System.currentTimeMillis() – start);
}
评论前必须登录!
注册