下载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); }