国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網站 > WEB開發 > 正文

使用HTML5中的Blob對象實現媒體播放功能

2024-04-27 15:08:01
字體:
來源:轉載
供稿:網友

前言

圖片、音頻、視頻等資源文件,我在之前的項目中都是采用,直接放到webContent路徑下,然后在頁面直接訪問。這樣就會存在一個安全性問題,就是無論什么用戶或者游客,只要知道文件的URL就可以通過在瀏覽器地址欄輸入URL直接獲取到。 最近在瀏覽網站的時候,無意間接觸到了Blob對象,經過研究終于可以實現從服務器其他路徑(不在webContent路徑下)獲取文件,并進行顯示或播放的功能了。其原理是,首先通過Ajax請求,獲取blob對象,在這個過程中就可以進行訪問限制(例如,訪問時檢測用戶是否登錄等)。然后通過js獲取blob對象的路徑,然后賦給標簽。

后臺代碼

后臺代碼和下載文件的代碼是一樣的,示例如下:

/* * 在這里可以進行權限驗證等操作 *///創建文件對象File f = new File("E://test.mp4");//獲取文件名稱String fileName = f.getName();//導出文件String agent = getRequest().getHeader("User-Agent").toUpperCase();InputStream fis = null;OutputStream os = null;try { fis = new BufferedInputStream(new FileInputStream(f.getPath())); byte[] buffer; buffer = new byte[fis.available()]; fis.read(buffer); getResponse().reset(); //由于火狐和其他瀏覽器顯示名稱的方式不相同,需要進行不同的編碼處理 if(agent.indexOf("Firefox") != -1){//火狐瀏覽器 getResponse().addHeader("Content-Disposition", "attachment;filename="+ new String(fileName.getBytes("GB2312"),"ISO-8859-1")); }else{//其他瀏覽器 getResponse().addHeader("Content-Disposition", "attachment;filename="+ URLEncoder.encode(fileName, "UTF-8")); } //設置response編碼 getResponse().setCharacterEncoding("UTF-8"); getResponse().addHeader("Content-Length", "" + f.length()); //設置輸出文件類型 getResponse().setContentType("video/mpeg4"); //獲取response輸出流 os = getResponse().getOutputStream(); // 輸出文件 os.write(buffer);}catch(Exception e){ System.out.PRintln(e.getMessage());} finally{ //關閉流 try { if(fis != null){ fis.close(); } } catch (IOException e) { System.out.println(e.getMessage()); } finally{ try { if(os != null){ os.flush(); } } catch (IOException e) { System.out.println(e.getMessage()); } finally{ try { if(os != null){ os.close(); } } catch (IOException e) { System.out.println(e.getMessage()); } } }}

前端代碼

javascript代碼:

//創建xmlHttpRequest對象var xhr = new xmlhttpRequest();//配置請求方式、請求地址以及是否同步xhr.open('POST', './play', true);//設置請求結果類型為blobxhr.responseType = 'blob';//請求成功回調函數xhr.onload = function(e) { if (this.status == 200) {//請求成功 //獲取blob對象 var blob = this.response; //獲取blob對象地址,并把值賦給容器 $("#sound").attr("src", URL.createObjectURL(blob)); }};xhr.send();

HTML代碼:

<video id="sound" width="200" controls="controls"></video>
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 瑞丽市| 恩平市| 安吉县| 乐至县| 涿鹿县| 安福县| 政和县| 渑池县| 乐平市| 财经| 藁城市| 大城县| 上思县| 武鸣县| 华蓥市| 福鼎市| 西林县| 灵武市| 化州市| 太原市| 张家港市| 南木林县| 呼玛县| 宝丰县| 紫金县| 彝良县| 班玛县| 营口市| 巢湖市| 贵溪市| 崇明县| 涡阳县| 高碑店市| 大埔区| 白银市| 手游| 盐亭县| 霍山县| 叙永县| 太白县| 行唐县|