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