java通過url讀取遠程數據并保持到本地

      網友投稿 1140 2025-03-31

      前幾天老姐突然告訴我,她在JD上買了本電子圖書,然后買完發現,只能在線或者使用它自己的閱讀器看,很不方便,讓我給想想辦法。

      然后我就開始琢磨,最開始,我直接使用Acrobat Reader打開,發現只有目錄,沒有其他,而且頁面上面的都存在,我想可能在真正的內容上增加了一塊蒙版,只能有"鑰匙"的人可以過濾它,要破解別人的編輯器,短時間肯定是不行的,網上也有很多人想到使用自動化腳本去自動對官方閱讀器截圖,但是我發現,截圖不是一頁一頁的,這就很懵逼了。最后只能通過在線閱讀這條線來想辦法。

      這個辦法和網友的類似,都是保存為圖片,然后通過pdf工具制作成pdf。

      在線閱讀我驚奇發現,在線文檔真好,一頁一張圖片,它已經給你做好,只是每次只更新出當前頁的前后幾張,其他的會被清除。到這里,思路就有了:

      跳轉到第n頁

      拉取刷新出來的額圖片路徑

      保存圖片路徑到緩存(我使用的是redis)

      通過網絡工具類,將緩存中的圖片地址全部下載到本地本次為圖片

      將圖片通過pdf工作轉為pdf

      第1步到第3步需要重復,可以使用自動工具和腳本來實現。

      第4步寫個控制器就可以了,最簡單的java接口就行。

      第5步直接網上在線服務就可以實現。

      java通過url讀取遠程數據并保持到本地

      為什么需要先緩存在下載咧,這里涉及到一個效率與圖片去重和過濾的問題,因為每次調整后獲取的圖片可能有重復的,存在redis的map中,自動就去重了;也是為了避免一邊獲取圖片路徑,一邊下載中途異常退出等任務不能正常執行完畢等問題。然后腳本獲取路徑,后保存到自己的服務器,唯一的問題可能就是跨域的問題。結果發現還是少了幾張圖,這樣就體會出使用緩存的好處了,可以直接通過代碼驗證少了那幾張圖,不用去檢查jpg文件,少的文件個位數,最后通過手動補全了。

      通過這種方式得到的圖片,唯一缺陷就是帶有"JD讀書"字樣和圖片分辨率不是很高,字體好像帶點毛腳。有強迫癥或者追求高品質的,就使用官方閱讀器吧,個人看了蠻清晰的,是文檔,不是圖片!!!

      下面附上java通過URL獲取網絡數據保存到本地的代碼。

      public?class?HttpURLConnectionUtil?{//?通過get請求得到讀取器響應數據的數據流public?static?InputStream?getInputStreamByGet(String?url)?{????try?{ ????????HttpURLConnection?conn?=?(HttpURLConnection)?new?URL(url) ????????????????.openConnection(); ????????conn.setReadTimeout(5000); ????????conn.setConnectTimeout(5000); ????????conn.setRequestMethod("GET");????????if?(conn.getResponseCode()?==?HttpURLConnection.HTTP_OK)?{ ????????????InputStream?inputStream?=?conn.getInputStream();????????????return?inputStream; ????????} ????}?catch?(IOException?e)?{ ????????e.printStackTrace(); ????}????return?null; }//?將服務器響應的數據流存到本地文件public?static?void?saveData(InputStream?is,?File?file)?{????try?(BufferedInputStream?bis?=?new?BufferedInputStream(is); ?????????BufferedOutputStream?bos?=?new?BufferedOutputStream(?????????????????new?FileOutputStream(file));)?{????????byte[]?buffer?=?new?byte[1024];????????int?len?=?-1;????????while?((len?=?bis.read(buffer))?!=?-1)?{ ????????????bos.write(buffer,?0,?len); ????????????bos.flush(); ????????} ????}?catch?(IOException?e)?{ ????????e.printStackTrace(); ????} } }

      調用:

      Set?imgNumber?=?(Set)?redisTemplate.opsForHash().keys(MAP_KEY); imgNumber.stream().forEach(e->{????????????????String?url?=?(String)?redisTemplate.opsForHash().get(MAP_KEY,e);????????????????String?fileName?=?e+".jpg"; ????????????????File?file?=?new?File("E:\\pdf圖片\\",?fileName); ????????????????InputStream?inputStream?=?HttpURLConnectionUtil ????????????????????????.getInputStreamByGet(url); ????????????????HttpURLConnectionUtil.saveData(inputStream,?file); });

      此方法只適應已經購買了的電子書,未購買的不適用。建議還是到正規網站或書店購買,支持正版,尊重知識。

      開發者 編程語言

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:段后6磅怎么設置(段后6磅怎么設置為0)
      下一篇:迷你圖是什么東東有哪些作用如何使用迷你圖(常見的迷你圖主要有)
      相關文章
      亚洲黄网在线观看| 亚洲av片一区二区三区| 一级毛片直播亚洲| 亚洲国产精品无码久久久秋霞1| 亚洲国产成人综合| 亚洲第一页中文字幕| 亚洲视频免费在线观看| 亚洲av午夜福利精品一区人妖| 亚洲人成网亚洲欧洲无码久久| 中文字幕精品亚洲无线码一区应用| 亚洲精品WWW久久久久久| 亚洲福利在线播放| 亚洲精品无码专区2| 中文字幕在亚洲第一在线| 亚洲综合精品网站| 亚洲中文字幕无码一区二区三区| 中文字幕人成人乱码亚洲电影 | 亚洲成人免费网址| 亚洲第一页在线播放| 久久精品国产亚洲av麻豆图片| 亚洲综合久久一本伊伊区| 亚洲天堂2017无码中文| 亚洲区日韩精品中文字幕| 日韩欧美亚洲中文乱码| 亚洲不卡AV影片在线播放| 77777亚洲午夜久久多人| 国产精品亚洲A∨天堂不卡| 久久精品国产亚洲AV网站 | 久久91亚洲精品中文字幕| 久久精品国产亚洲AV大全| 亚洲成a人片在线观看播放| 亚洲香蕉久久一区二区| 亚洲另类自拍丝袜第五页| 日韩亚洲精品福利| 中文字幕在亚洲第一在线| 亚洲成人中文字幕| 亚洲国产精品成人综合久久久| 亚洲中文字幕久久精品无码VA| 色婷婷亚洲一区二区三区| 久久久久亚洲精品天堂久久久久久| 久久久久久久尹人综合网亚洲|