亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2020-07-10 13:11:52 來源:網絡 閱讀:6845 作者:狐狽筱筱生 欄目:開發技術

前幾天老姐突然告訴我,她在JD上買了本電子圖書,然后買完發現,只能在線或者使用它自己的閱讀器看,很不方便,讓我給想想辦法。
然后我就開始琢磨,最開始,我直接使用Acrobat Reader打開,發現只有目錄,沒有其他,而且頁面上面的都存在,我想可能在真正的內容上增加了一塊蒙版,只能有"鑰匙"的人可以過濾它,要破解別人的編輯器,短時間肯定是不行的,網上也有很多人想到使用自動化腳本去自動對官方閱讀器截圖,但是我發現,截圖不是一頁一頁的,這就很懵逼了。最后只能通過在線閱讀這條線來想辦法。
這個辦法和網友的類似,都是保存為圖片,然后通過pdf工具制作成pdf。
在線閱讀我驚奇發現,在線文檔真好,一頁一張圖片,它已經給你做好,只是每次只更新出當前頁的前后幾張,其他的會被清除。到這里,思路就有了:

  1. 跳轉到第n頁
  2. 拉取刷新出來的額圖片路徑
  3. 保存圖片路徑到緩存(我使用的是redis)
  4. 通過網絡工具類,將緩存中的圖片地址全部下載到本地本次為圖片
  5. 將圖片通過pdf工作轉為pdf
    第1步到第3步需要重復,可以使用自動工具和腳本來實現。
    第4步寫個控制器就可以了,最簡單的java接口就行。
    第5步直接網上在線服務就可以實現。
    為什么需要先緩存在下載咧,這里涉及到一個效率與圖片去重和過濾的問題,因為每次調整后獲取的圖片可能有重復的,存在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<String> imgNumber = (Set<String>) 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);
});

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

湖州市| 壤塘县| 竹溪县| 永修县| 闻喜县| 黎川县| 山东省| 泸溪县| 庆云县| 石狮市| 新绛县| 比如县| 翁牛特旗| 玉龙| 渑池县| 博乐市| 宁津县| 富民县| 西乌珠穆沁旗| 伊吾县| 怀来县| 永春县| 霍邱县| 上犹县| 太康县| 东阿县| 萍乡市| 伊春市| 顺义区| 称多县| 昌都县| 尚志市| 承德市| 江口县| 政和县| 荃湾区| 柳江县| 北宁市| 巴中市| 穆棱市| 临沂市|