Java實現下載和刪除oss圖片、音頻等等

實現下載功能,首先需要實現上傳功能, 上傳實現可以參數我之前寫的文章: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";
            }
            
    }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章