前幾天老姐突然告訴我,她在JD上買了本電子圖書,然后買完發(fā)現(xiàn),只能在線或者使用它自己的閱讀器看,很不方便,讓我給想想辦法。
然后我就開始琢磨,最開始,我直接使用Acrobat Reader打開,發(fā)現(xiàn)只有目錄,沒有其他,而且頁面上面的都存在,我想可能在真正的內(nèi)容上增加了一塊蒙版,只能有"鑰匙"的人可以過濾它,要破解別人的編輯器,短時間肯定是不行的,網(wǎng)上也有很多人想到使用自動化腳本去自動對官方閱讀器截圖,但是我發(fā)現(xiàn),截圖不是一頁一頁的,這就很懵逼了。最后只能通過在線閱讀這條線來想辦法。
這個辦法和網(wǎng)友的類似,都是保存為圖片,然后通過pdf工具制作成pdf。
在線閱讀我驚奇發(fā)現(xiàn),在線文檔真好,一頁一張圖片,它已經(jīng)給你做好,只是每次只更新出當(dāng)前頁的前后幾張,其他的會被清除。到這里,思路就有了:
將圖片通過pdf工作轉(zhuǎn)為pdf
第1步到第3步需要重復(fù),可以使用自動工具和腳本來實現(xiàn)。
第4步寫個控制器就可以了,最簡單的java接口就行。
第5步直接網(wǎng)上在線服務(wù)就可以實現(xiàn)。
為什么需要先緩存在下載咧,這里涉及到一個效率與圖片去重和過濾的問題,因為每次調(diào)整后獲取的圖片可能有重復(fù)的,存在redis的map中,自動就去重了;也是為了避免一邊獲取圖片路徑,一邊下載中途異常退出等任務(wù)不能正常執(zhí)行完畢等問題。然后腳本獲取路徑,后保存到自己的服務(wù)器,唯一的問題可能就是跨域的問題。結(jié)果發(fā)現(xiàn)還是少了幾張圖,這樣就體會出使用緩存的好處了,可以直接通過代碼驗證少了那幾張圖,不用去檢查jpg文件,少的文件個位數(shù),最后通過手動補全了。
通過這種方式得到的圖片,唯一缺陷就是帶有"JD讀書"字樣和圖片分辨率不是很高,字體好像帶點毛腳。有強迫癥或者追求高品質(zhì)的,就使用官方閱讀器吧,個人看了蠻清晰的,是文檔,不是圖片!?。?br/>下面附上java通過URL獲取網(wǎng)絡(luò)數(shù)據(jù)保存到本地的代碼。
public class HttpURLConnectionUtil {
// 通過get請求得到讀取器響應(yīng)數(shù)據(jù)的數(shù)據(jù)流
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;
}
// 將服務(wù)器響應(yīng)的數(shù)據(jù)流存到本地文件
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();
}
}
}
調(diào)用:
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);
});
此方法只適應(yīng)已經(jīng)購買了的電子書,未購買的不適用。建議還是到正規(guī)網(wǎng)站或書店購買,支持正版,尊重知識。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
新聞標(biāo)題:java通過url讀取遠(yuǎn)程數(shù)據(jù)并保持到本地-創(chuàng)新互聯(lián)
文章起源:http://www.bm7419.com/article30/dgcspo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、搜索引擎優(yōu)化、微信公眾號、響應(yīng)式網(wǎng)站、標(biāo)簽優(yōu)化、品牌網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容