OSS流式下载,返回一个图片,可以浏览器直接展示 (我们这里是不需要下载,只需要拿到这个流输出到浏览器上就可以了)

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

OSS流式下载

服务上传文件后需要回显照片在页面上,以方便用户观看,因为我们的服务和阿里云服务是同地域,所以可以直接使用阿里云的内网进行回显数据,内网是不收取流量费用,因此也省了很多的money,哈哈哈哈哈。。。。

  1. 回显工具类
//回显
    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());
            }
        }
    }

结果
path为文件路径

这里附上阿里云的流式下载链接
流式下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值