实现下载功能,首先需要实现上传功能, 上传实现可以参数我之前写的文章:https://blog.csdn.net/u014373554/article/details/83650304

实现方式:是根据上传完成后会返回url。所以下载也是根据url实现下载方法。具体实现请看下面代码:

以图片为例:

返回的url地址格式是: http://aa.xxxx.com:8080/FeedBack/xx/iOS_xxx_35671549541105750.jpg

一、文件下载

1、controller层写法:比较简单

/**
     * 文件下载
     * @param url 文件的url
     * @param request
     * @param response
     * @throws Exception 
     */
    @RequestMapping(value = "/download",method = RequestMethod.GET)
    @ResponseBody
    public void downLoadFile(String url,HttpServletRequest request,HttpServletResponse response) throws Exception{
        oSSImageService.downLoadFile(url, request, response);
    }

2、service层:

@Override
    public void downLoadFile(String url, HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        //上传图片完成会返回前端生成的url为: http://aa.xxxx.com:8080/FeedBack/xx/iOS_xxx_35671549541105750.jpg
        // fileName :前台传入的文件名(主要是标识文件是什么格式.png或.zip)为:iOS_xxx_35671549541105750.jpg
        // ossKey:上传文件时阿里云返回的标识   :FeedBack/xx/iOS_xxx_35671549541105750.jpg 这个就是文件标识
        OSSClientUtil oss = new OSSClientUtil();
        String ossKey = OSSGetURLAndKey.ossGetKey(url);
        String fileName = OSSGetURLAndKey.ossGetURL(url);
        System.out.println("ossKey="+ossKey +"---------fileName=" +fileName);
        oss.downLoadFile(fileName, ossKey, request, response);
        
    }

3、OSSGetURLAndKey工具类方法

public class OSSGetURLAndKey {
    
    /**
     * 获取文件名称
     * @param url
     * @return
     */
    public static String  ossGetURL(String url){
        String[] strArray = url.split("/");
        String fileName = strArray[strArray.length-1];
        return fileName;
    }
    /**
     * 获取ossKey
     * @param url
     * @return
     */
    public static String  ossGetKey(String url){
        String[] strArray = url.split(":");
        String urls = strArray[2].replace("8080/", ""); //这里上传的图片后,访问的时候是带端口的,所有需要单独处理掉
        return urls;
    }
}

4、downLoadFile方法:主要核心实现方式:在上传里面包装一个下载文件的类

public  void  downLoadFile(String fileName, String ossKey, HttpServletRequest request,HttpServletResponse response) throws IOException{
            try {  
            //上传图片完成会返回前端生成的url为: http://aa.xxxx.com:8080/FeedBack/xx/iOS_xxx_35671549541105750.jpg
            // fileName :前台传入的文件名(主要是标识文件是什么格式.png或.zip)为: iOS_xxx_35671549541105750.jpg,说白了就是文件名称
            // ossKey:上传文件时阿里云返回的标识   :FeedBack/xx/iOS_xxx_35671549541105750.jpg 这个就是文件标识,说白就是文件的地址。
            OSSObject ossObject = ossClient.getObject(bucketName, ossKey);//bucketName需要自己设置  
            // 已缓冲的方式从字符输入流中读取文本,缓冲各个字符,从而提供字符、数组和行的高效读取
            //BufferedReader reader = new BufferedReader(new  InputStreamReader(ossObject .getObjectContent()));
             BufferedInputStream in=new BufferedInputStream(ossObject.getObjectContent());  
                      // 缓冲文件输出流
            BufferedOutputStream out=new BufferedOutputStream(response.getOutputStream());
            // 通知浏览器以附件形式下载
           response.setHeader("Content-Disposition","attachment;filename="+ URLEncoder.encode(fileName,"UTF-8"));
           byte[] car=new byte[1024];  
           int L=0;  
           while((L=in.read(car))!=-1){  
               out.write(car, 0,L);  
                 
           }  
           if(out!=null){  
               out.flush();

// 数据读取完成后,获取的流必须关闭,否则会造成连接泄漏,导致请求无连接可用,程序无法正常工作。
               out.close();  
           }  
           if(in!=null){  
               in.close();  
           }  
             // 关闭OSSClient。
           ossClient.shutdown();  
             
       } catch (Exception e) {  
           e.printStackTrace();  
       }  
        
    }

5、前端测试代码

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <script type="text/javascript" src="js/jquery.min.js"></script>
        <title></title>
    </head>
    <body>
    <form action="#">   
        文件的url:<input type="text" name="url" id="url"/>
        <input id="btn" type="button" value="sublimt"/>
    </form>  
    </body>
    <script >
        document.getElementById('btn').onclick = function(){
        var url = document.getElementById('url').value;
        alert("url="+url);
        location.href = 'http://localhost:8899/api/download?url=' + url ;
    }
    </script>
</html>

6、测试结果:测试视频是否可以下载,点击下载

下载成功 ,去本地看文件。

二、删除和下载差不多,列举主要删除的方法

/**
     * 删除文件
     * @param ossKey
     * @param request
     * @param response
     * @return
     */
    public String deleteFile(String ossKey, HttpServletRequest request,HttpServletResponse response){
            try {
                //上传图片完成会返回前端生成的url为: http://aa.xxxx.com:8080/FeedBack/xx/iOS_xxx_35671549541105750.jpg
                // ossKey:上传文件时阿里云返回的标识   :FeedBack/xx/iOS_xxx_35671549541105750.jpg 这个就是文件标识
                ossClient.deleteObject(bucketName, ossKey);
                // 关闭OSSClient。
                ossClient.shutdown();
                return "success";
            } catch (Exception e) {
                e.printStackTrace();
                return "error";
            }
            
    }

Java实现下载和删除oss图片、音频等等相关推荐

  1. 基于ElementUI的一个文件批量上传,下载,删除以及图片预览组件(样式篇)

    一.前言 领导们的心总是难以猜测,这不,他们对于elementUI的上传组件有意见,说不能真正达到批量上传(也确实,因为elementUI的上传组件虽说可以多文件上传,但是它实际上是上传一个文件就建立 ...

  2. java生成图片url_Java Springboot如何基于图片生成下载链接

    现有一些图片在服务器上的链接,在浏览器中打开这些链接是直接显示在浏览器页面的形式. 现在需要生成这些图片的单独下载以及打包下载链接,即在浏览器中打开下载链接后弹出下载框提示下载.由于前端存在跨域问题, ...

  3. java实现ftp连接、登陆、上传、下载、删除文件、获取目录、文件列表

    全栈工程师开发手册 (作者:栾鹏) java教程全解 java实现ftp连接.登陆.上传.下载.删除文件.获取目录.文件列表等操作. 本地调试,首先需要在本机上开启ftp服务和ftp站点. 测试代码 ...

  4. java 多线程下载图片_java多线程实现下载图片并压缩

    最近在做一个需求:从其他系统的ftp目录下载存储图片url的文件,然后读取文件中的url地址,根据地址下载图片后按天压缩成一个包,平均一个地址文件中包含4000个地址左右,也就是说一个文件扫描后需要下 ...

  5. java 批量下载图片,批量打包文件并下载

    1.批量下载网页上,动态生成的图片到服务器上指定的目录中 2.将目录中的所有的图片打包成zip包 3.删除原来的目录 4.下载zip包 1:由于网页上的图片是全部都是连接动态生成的,所以同事在网上找了 ...

  6. 关于java下载Word文档图片显示不全的问题

    关于java 从FTP下载Word文档图片显示不全的问题 最近想实现这样一个功能,从ftp服务器获取word文档下载下来,但是出现了一下问题: 本地启动的tomcat,可以下载word,图片显示正常: ...

  7. 使用阿里云OSS实现文件的上传、下载、删除及修改功能

    一.配置OSS相关配置信息 1.要配置 OSS 相关配置信息,您可以按照以下步骤操作: 登录阿里云控制台,进入 OSS 控制台,创建一个新的 OSS Bucket,并记录下以下信息:Bucket 名称 ...

  8. java使用Jsch实现远程操作linux服务器进行文件上传、下载,删除和显示目录信息...

    1.java使用Jsch实现远程操作linux服务器进行文件上传.下载,删除和显示目录信息. 参考链接:https://www.cnblogs.com/longyg/archive/2012/06/2 ...

  9. Java实现ftp的上传、下载和删除

    前期准备 1. 搭建Ftp服务器 为了方便本地测试,一开始可以先在本地搭建Ftp服务器.搭建Ftp服务器的教程有很多,这里就不多讲了,下面是我用到的教程你们可以参考一下. 百度经验:Win10如何搭建 ...

最新文章

  1. js 获取当前时间 随记
  2. Java垃圾回收工作原理
  3. 玩玩TCPCOPY+ intercept+mysql-replay-module(未成功)
  4. mfc 消息消息队列概念_必看入门秘籍——解密原理:消息中间件之RabbitMQ
  5. vb实时错误6 溢出_java内存溢出系列(6): Out of swap space?
  6. Python中lambda的用法及其与def的区别解析
  7. oj系统 的c语言答案,宁波大学OJ系统前105道C语言题目及答案精讲
  8. ubuntu搜狗拼音输入法选词框乱码
  9. 生物信息学 之 序列比对
  10. levelup游戏资料库项目开发备忘录(10.26)
  11. HTML系列之水平线标签hr
  12. jquery常用方法之siblings方法
  13. 浅谈DOS扩展器和DPMI
  14. ios给按钮图片根据不同的主题更改颜色
  15. 贵州学计算机,在贵州省计算机学校学习计算机专业如何?
  16. Windows11设置登录密码
  17. 高一必修一 第一单元
  18. 刷屏器!简单!快速!稳定!可控制速度!
  19. Matlab学习——曲柄滑块的运动仿真
  20. Java服务,CPU100%问题如何快速定位?

热门文章

  1. 动能芯片 | DP4301—SUB-1G高集成度无线收发芯片
  2. [YOLOv7/YOLOv5系列改进NO.44]融入适配GPU的轻量级 G-GhostNet
  3. 进程控制-----操作系统
  4. Vector 删除元素
  5. 华三交换机ping不通用户但用户_用H3C模拟器做交换机实验,但是终端总是PING不通交换机,求各位高手帮忙!...
  6. 2020秋季C语言练习题(4)
  7. WM6不支持SendRequestEx,怎么上传HTTP表单?
  8. 【微信易信公众平台开发】天气查询功能
  9. 二进制补码计算——有符号数的乘法
  10. android+高仿iphone,网购iPhone7P的失败经历,原来是安卓高仿!