实现下载功能,首先需要实现上传功能, 上传实现可以参数我之前写的文章

实现方式:是根据上传完成后会返回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、测试结果:测试视频是否可以下载,点击下载

java 下载url图片 java oss下载图片_iOS

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

java 下载url图片 java oss下载图片_文件名_02

 

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

/**
      * 删除文件
      * @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";
             }
             
     }