Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 91精品国产爱久久久久久,久久伊人亚洲,亚洲免费视频一区二区三区

          整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          炸裂!!用SingleFile把網頁保存成html,一個文件就搞定

          我們瀏覽網頁時可能需要把網頁上的內容保存下來,這時候有幾種方式可以做到:1、把重要的內容復制出來;2、對網頁進行截圖保存,我們推薦過的截圖插件如印象筆記·剪藏、Full Page Screen Capture等;3、把網頁保存成PDF,如Adobe Acrobat。4、直接把網頁保存成HTML。當然所有瀏覽器都有另存頁面為HTML 文檔的功能,不過可能會遇到一些問題,保存后不是各種資源如JS、CSS和圖片的文件很多,就是打開后無法載入樣式表,圖片顯示不出來,要把網頁備份起來或傳送給別人就很麻煩。本文要介紹的SingleFile是一款免費瀏覽器擴展,可以將完整的頁面保存到一個HTML文件中,包括所有CSS和圖片等等,讓用戶即使在一個HTML文檔中也能瀏覽完整內容。除了單一頁面外,SingleFile還支持保存選中的部分、非固定標簽頁或所有頁面,操作上也非常的簡單易用。如果你有保存頁面的需求,可以試試這款插件。


          簡介

          SingleFile

          換流的作用就是將我們的字節流轉換成字符流

          字節流是可以處理一切內容的,包括圖片,音頻,視頻,也包括純文本,在很多系統和框架的底層返回給我們的都是字節流(有時候我們使用字節流處理并不方便,這就是我們為什么要轉換字符流的原因)

          System.in,System.out都是字節流,因為我們鍵盤輸入還是輸出的都是字符串,所以我們可以對它進行轉換。

          在我們的底層,如果是純文本的話就涉及到一個東西是字符集。將字節轉成字符叫做解碼(在解碼的過程中就涉及到字符集的問題,如果工程的字符集跟源頭(文件)的字符集不統一就會出現亂碼),所以這個時候我們最好可以指定字符集

          從字節流到字符流的轉換

          只要我們看見Reader都建議加一個BufferedReader

          將寫入的字符編碼為字節

          講一下什么使用字節流,什么時候使用字符流

          其實底層都是字節,我們使用字符是為了處理一些文本和字符串提高性能字符流處理的單元為2個字節的Unicode字符,分別操作字符、字符數組或字符串,而字節流處理單元為1個字節,操作字節和字節數組。所以字符流是由Java虛擬機將字節轉化為2個字節的Unicode字符為單位的字符而成的,所以它對多國語言支持性比較好!如果是音頻文件、圖片、歌曲,就用字節流好點,如果是關系到中文(文本)的,用字符流好點 所有文件的儲存是都是字節(byte)的儲存,在磁盤上保留的并不是文件的字符而是先把字符編碼成字節,再儲存這些字節到磁盤。在讀取文件(特別是文本文件)時,也是一個字節一個字節地讀取以形成字節序列

          字節流和字符流的使用:


          Java IO流中提供了兩種用于將字節流轉換為字符流的轉換流。其中InputStreamReader用于將字節輸入流轉換為字符輸入流,其中OutputStreamWriter用于將字節輸出流轉換為字符輸出流。使用轉換流可以在一定程度上避免亂碼,還可以指定輸入輸出所使用的字符集


          講一下緩存流和轉換流的結合,看見Reader我們就可以使用緩存流提高性能

          使用轉換流實現字節到字符的轉換以及輸入和輸出

          · 節點流:可以從或向一個特定的地方(節點)讀寫數據。如FileReader.

          · 處理流:是對一個已存在的流的連接和封裝,通過所封裝的流的功能調用實現數據讀寫。如BufferedReader.處理流的構造方法總是要帶一個其他的流對象做參數。一個流對象經過其他流的多次包裝,稱為流的鏈接。

          講一下什么是節點流

          字符流和字節流就可以叫做節點流

          出現亂碼的原因有兩種:

          1.字節數不夠出現亂碼

          2.字符集不統一出現亂碼

          html文件的下載,如何使用字節流,如何使用轉換流

          在java中文件的傳輸其實就是靠流來實現的,網絡流也是屬于字節流,所以我們先使用字節流

          我覺得寫的時候應該是全部都寫出來才寫的,具體debug才知道,我這里就不弄了

          為什么讀取的時候亂碼,寫入的時候不亂碼

          忽然一下子自己就懂了,總之寫入的時候只要講字符集設置的和源頭的文件一致就可以了

          前端項目開發的時候,系統支持文件下載是前端開發中常用到的功能之一,當用戶訪問我們的網站時發現有自己需要的資源時可以將資源下載下來。文件下載主要有兩種形式,一種是通過文件地址下載,該文件可以存放在前端或者后端。另一種則是通過文件流下載,前端通過發送請求給后端并獲取后端文件流進行下載。

          a標簽下載

          download屬性:是HTML5中的a標簽的新特性,用來規定被下載的超鏈接目標。在a標簽中如果沒有申明download屬性的時a標簽的默會鏈接跳轉進行預覽(如txt , jpg , pdf ),當前瀏覽器不支持預覽的文件時則出現下載。當申明了download屬性之后瀏覽器會對href屬性鏈接的文件進行下載。download屬性與不支持H5的低版本瀏覽器不兼容且僅限于同源文件,如果是非同源download屬性會失效。比如引用第三方的網站內容、引用前后端分離的服務器內容、甚至本地測試引用的本地文件,download都會不起作用。如果你想測試該功能可以在本地開一個服務,將文件放同一服務中測試就可以了。

          直接使用a標簽時只要在a標簽中添加download屬性,如果是非a標簽的話可以在出發事件的時候通過JavaScript來創建一個隱藏a標簽下載,當我們點擊時觸發隱藏的a標簽下載事件。這里使用appendChild和removeChild的處理是為了兼容Firefox瀏覽器。

          XMLHttpRequest下載

          需要了解XMLHttpRequest可以參考文章:JavaScript實戰001:XMLHttpRequest使用入門,這里我利用XMLHttpRequest對象來發送請求,用blob類型來接受后臺發過來的二進制類型文件。然后模擬a標簽創建隱藏的下載鏈接,通過URL.createObjectURL()方法創建一個指向blob對象的URL地址。

          iframe下載

          iframe是HTML標簽元素,可以用來創建內聯框架。iframe提供了src屬性用來規定在 iframe 中顯示的文檔的 URL,我們可以直接將文件地址拋給iframe,也可以賦值文件流地址給iframe。功能實現跟a標簽有點相似,創建一個隱藏的iframe標簽來實現文件的下載功能。使用文件地址下載需要注意的是瀏覽器支持預覽的文件類型無法下載(比如圖片、PDF文檔、text文本等會直接打開文件預覽),文件流下載只需將請求接口賦給src屬性,iframe會自動去請求該文件實現下載。

          window.open下載

          window.open()方法用于打開一個新的瀏覽器窗口或查找一個已命名的窗口,也可以用它來實現文件下載功能。而且這個比iframe更簡單,直接將文件地址或者請求接口賦給window.open(url)方法即可實現文件下載功能。但是有個缺點就是每次下載都會打開一個新的窗口來實現下載(想不跳轉可以嘗試window.location.assign()方法,用于加載一個新的文檔),而且如果使用文件地址下載的是瀏覽器支持預覽的文件類型無法下載(比如圖片、PDF文檔、text文本等會直接打開文件預覽)。

          form表單提交下載

          form表單是個比較常用的html表簽,用戶提交用戶信息,比如常見的登錄、注冊界面大部分都是通過form表單進行數據提交的。form表單所有要提交的數據都必須放在form標簽中,method屬性定義提交的方法(有get和post兩種提交方法),action屬性定義請求的地址。form標簽中支持input、menus、textarea、fieldset、legend 和 label 等元素,通過submit向服務器提交數據。這里我創建了form表單和input框,input用于輸入請求的參數,form用于提交數據請求。

          Django后臺接口

          這里提供下Django的后臺文件請求接口,以上文件請求都是基于該接口實現的。接收請求方法為GET,請求參數為id(數據庫存儲的文件id),采用FileResponse方式返回的文件流信息(具體實現功能可以參考文章:Django實戰013:各種文件下載功能實現詳解)。

          總結:

          下載的方式方法有很多,以上只是JavaScript中常見的幾種下載方式。其實用ajax或者axios也可以實現下載,但是萬變不離其中,會JavaScript下載害怕不會別的么。以上下載方式個人覺得還是iframe比較簡單方便,請求最好還是通過文件流來實現,相對文件地址下載會更安全些。

          更多前端技巧可以參考專欄:Vue實戰技巧


          主站蜘蛛池模板: 一区国严二区亚洲三区| 午夜一区二区在线观看| 人妻无码一区二区视频| 在线精品视频一区二区| 99国产精品一区二区| 波多野结衣中文一区二区免费| 99精品一区二区三区| 中文字幕一区二区三| 无码毛片一区二区三区中文字幕 | 精品一区二区三区无码视频| 3d动漫精品成人一区二区三| 国产裸体歌舞一区二区| 中文字幕一区二区三区精华液| 日韩国产一区二区| 精品免费AV一区二区三区| 国产主播福利精品一区二区| 无码视频一区二区三区| 天堂一区二区三区在线观看| 精品国产一区二区三区香蕉| 少妇精品久久久一区二区三区| 国产精品丝袜一区二区三区| 国产区精品一区二区不卡中文| 中文字幕一区二区三区永久| 国产成人精品一区二区三区无码| 国产精品亚洲不卡一区二区三区| 一区二区三区亚洲视频| 国产成人精品无人区一区 | 精品91一区二区三区| 无码国产精品一区二区高潮| 日韩精品电影一区| 日韩一区二区三区精品| 久久精品国产第一区二区| 国产美女精品一区二区三区| 人妻无码一区二区不卡无码av| 精品一区二区三区东京热| 日本一区二区三区不卡视频 | 精品国产aⅴ无码一区二区| 日本一区二区视频| 国产一区二区三区手机在线观看| 一区二区国产精品| 久久精品一区二区|