OSS流式下载
服务上传文件后需要回显照片在页面上,以方便用户观看,因为我们的服务和阿里云服务是同地域,所以可以直接使用阿里云的内网进行回显数据,内网是不收取流量费用,因此也省了很多的money,哈哈哈哈哈。。。。
- 回显工具类
//回显
public static OSSObject getFileInternalUpload(String objectName) {
OSS ossClient = null;
//获取外网oss客户端
if("是否走内网".equals(Method.picHTTP)){
//获取内网oss客户端
ossClient = OssUtil.getInternalOssClient();
}else {
//获取外网客户端
ossClient = OssUtil.getInternalOssClient();
}
//判断文件是否存在阿里云服务上
boolean b = ossClient.doesObjectExist(ALIYUN_OSS_BUCKET_ID, objectName);
OSSObject ossObject = null;
//判断文件是否存在
if (b) {
// ossObject包含文件所在的存储空间名称、文件名称、文件元信息以及一个输入流。
ossObject = ossClient.getObject(ALIYUN_OSS_BUCKET_ID, objectName);
}
return ossObject;
}
获取ossclient
public static final OSS getInternalOssClient() {
// ALIYUN_OSS_INTERNAL_ENDPOINT : oss-cn-beijing-internal.aliyuncs.com
OSS ossClient = new OSSClientBuilder().build(ALIYUN_OSS_INTERNAL_ENDPOINT, ALIYUN_ACCESS_INTERNAL_KEY_ID, ALIYUN_OSS_ACCESS_INTERNAL_KEY_SECRET);
return ossClient;
}
Action
//上传文件到阿里云OSS服务器 path= http://oss.beijing.com.cn/20200511/1589176092568.jpg
@RequestMapping(value = "/fileInternalOSS")
@ResponseBody
private void internalOSS(HttpServletRequest request, HttpServletResponse response, String path) throws Exception {
FileInputStream in = null;
ServletOutputStream out = null;
try {
log.info("oss文件回显开始。。。");
//文件地址不为空
if (StringUtils.isNotBlank(path)) {
String[] sourceurls = path.split("/");
String videoName = sourceurls[sourceurls.length - 1];
String filePath = sourceurls[sourceurls.length - 2] + "/" + videoName;
OSSObject fileInternalUpload = OssUtil.getFileInternalUpload(filePath);
if(fileInternalUpload==null){
throw new Exception("文件在oss不存在,请检查文件名");
}
//获取这个文件流
InputStream objectContent = fileInternalUpload.getObjectContent();
//获取这个文件类型
String contentType = fileInternalUpload.getObjectMetadata().getContentType();
log.info("oss文件回显结束[{}]", objectContent);
String str = "{\"status\": \"success\",\"ossfile\":\"" + objectContent
+ "\"}";
response.setContentType(contentType);
//输出流到页面上直接展示一个图片或者视频
out = response.getOutputStream();
// 读取文件流
int len = 0;
byte[] buffer = new byte[1024 * 10];
while ((len = objectContent.read(buffer)) != -1) {
out.write(buffer, 0, len);
}
out.flush();
}
} catch (FileNotFoundException e) {
log.error("responseFileStream error:FileNotFoundException" + e.toString());
} catch (Exception e) {
log.error("responseFileStream error:" + e.toString());
} finally {
try {
out.close();
in.close();
} catch (NullPointerException e) {
log.error("responseFileStream stream close() error:NullPointerException" + e.toString());
} catch (Exception e) {
log.error("responseFileStream stream close() error:" + e.toString());
}
}
}
结果

这里附上阿里云的流式下载链接
流式下载
本文介绍了如何通过阿里云OSS服务实现流式下载,以在页面上直接展示上传的图片,避免了额外的流量费用。提供了一个回显工具类的简单介绍,并给出了获取OSS客户端及流式下载的步骤。

4108

被折叠的 条评论
为什么被折叠?



