下载OSS服务器上的文档
文章目录
- 前言
- 正文
- 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); }

