斷點(diǎn)續(xù)傳java代碼,實(shí)現(xiàn)斷點(diǎn)續(xù)傳

java實(shí)現(xiàn)ftp斷點(diǎn)續(xù)傳問(wèn)題

//嘗試移動(dòng)文件內(nèi)讀取指針,實(shí)現(xiàn)斷點(diǎn)續(xù)傳

創(chuàng)新互聯(lián)從2013年創(chuàng)立,先為綏芬河等服務(wù)建站,綏芬河等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為綏芬河企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。

result

=

uploadFile(remoteFileName,

f,

ftpClient,

remoteSize);

//如果斷點(diǎn)續(xù)傳沒(méi)有成功,則刪除服務(wù)器上文件,重新上傳

if(result

==

UploadStatus.Upload_From_Break_Failed){

if(!ftpClient.deleteFile(remoteFileName)){

return

UploadStatus.Delete_Remote_Faild;

}

result

=

uploadFile(remoteFileName,

f,

ftpClient,

0);

}

關(guān)于JAVA斷點(diǎn)續(xù)傳

024字節(jié))。第一次B接收了512字節(jié),那么第二次連接A就應(yīng)該從513字節(jié)開始傳輸。

也就是說(shuō),在第二次傳輸時(shí),B要提供“我要從513字節(jié)開始傳送文件F”的信息,然后A使用FileInputStream構(gòu)建輸入流讀取本地文件,使用skip(512)方法跳過(guò)文件F的前512字節(jié)再傳送文件,之后B將數(shù)據(jù)追加(append)到先前接收的文件末尾即可。

進(jìn)一步考慮,如果要實(shí)現(xiàn)多線程傳送,即分塊傳輸,也同樣的道理。假如B要求分作兩塊同時(shí)傳輸,那么A啟動(dòng)兩個(gè)線程,一個(gè)從513字節(jié)讀到768字節(jié)(工256字節(jié)),第二個(gè)線程從769字節(jié)到1024字節(jié)即可。

如果你要從網(wǎng)絡(luò)上下載文件,就是說(shuō)A方不是你實(shí)現(xiàn)的,那么你要先確認(rèn)A方支不支持?jǐn)嚯娎m(xù)傳功能(HTTP1.1),然后你查閱下HTTP1.1協(xié)議,在HTTP1.1版本里,可以通過(guò)設(shè)置請(qǐng)求包頭某個(gè)字段的信息(使用URLConnection創(chuàng)建連接并使用setRequestProperty(String key, String value) 方法設(shè)置)從而精確讀取文件的某一段數(shù)據(jù)的。注意,基于HTTP斷點(diǎn)續(xù)傳的關(guān)鍵是1.1版本,1.0版本是不支持的。

補(bǔ)充:

嗯,查到了,是設(shè)置range屬性,即setRequestProperty("range", "bytes=513-1024").你可以使用迅雷下載某個(gè)文件,然后從”線程信息“中就可以看到這個(gè)http1.1斷點(diǎn)續(xù)傳的所有行為信息了。

瀏覽器的斷點(diǎn)續(xù)傳用java怎么實(shí)現(xiàn)

斷點(diǎn)設(shè)置方法,當(dāng)有臨時(shí)文件時(shí),直接在臨時(shí)文件中讀取上次中斷時(shí)的斷點(diǎn)位置。沒(méi)有臨時(shí)文件,即第一次時(shí),重新設(shè)置斷點(diǎn)。

rantmpfile.seek()跳轉(zhuǎn)到一個(gè)位置的目的是為了讓各個(gè)斷點(diǎn)存儲(chǔ)的位置盡量分開。

Java Socket如何實(shí)現(xiàn)文件的斷點(diǎn)續(xù)傳,有代碼更好

1package com.tangshun.;

2

3import java.io.File;

4import java.io.IOException;

5import java.io.InputStream;

6import java.io.RandomAccessFile;

7import java.net.HttpURLConnection;

8import java.net.MalformedURLException;

9import java.net.URL;

10

11//斷點(diǎn)續(xù)傳

12public class DownLoad {

13

14 public static void down(String URL, long nPos, String savePathAndFile) {

15 try {

16 URL url = new URL(URL);

17 HttpURLConnection httpConnection = (HttpURLConnection) url

18 .openConnection();

19 // 設(shè)置User-Agent

20 httpConnection.setRequestProperty("User-Agent", "NetFox");

21 // 設(shè)置斷點(diǎn)續(xù)傳的開始位置

22 httpConnection.setRequestProperty("RANGE", "bytes=" + nPos);

23 // 獲得輸入流

24 InputStream input = httpConnection.getInputStream();

25 RandomAccessFile oSavedFile = new RandomAccessFile(savePathAndFile,

26 "rw");

27 // 定位文件指針到nPos位置

28 oSavedFile.seek(nPos);

29 byte[] b = new byte[1024];

30 int nRead;

31 // 從輸入流中讀入字節(jié)流,然后寫到文件中

32 while ((nRead = input.read(b, 0, 1024)) 0) {

33 (oSavedFile).write(b, 0, nRead);

34 }

35 httpConnection.disconnect();

36 } catch (MalformedURLException e) {

37 e.printStackTrace();

38 } catch (IOException e) {

39 e.printStackTrace();

40 }

41 }

42

43 public static long getRemoteFileSize(String url) {

44 long size = 0;

45 try {

46 HttpURLConnection conn = (HttpURLConnection) (new URL(url))

47 .openConnection();

48 size = conn.getContentLength();

49 conn.disconnect();

50 } catch (Exception e) {

51 e.printStackTrace();

52 }

53 return size;

54 }

55

56public static void main(String[] args) {

57 String url = " ";

58 String savePath = "F:\\";

59 String fileName = url.substring(url.lastIndexOf("/"));

60 String fileNam=fileName;

61 HttpURLConnection conn = null;

62 try {

63 conn = (HttpURLConnection) (new URL(url)).openConnection();

64 } catch (Exception e) {

65 e.printStackTrace();

66 }

67 File file = new File(savePath + fileName);

68 // 獲得遠(yuǎn)程文件大小

69 long remoteFileSize = getRemoteFileSize(url);

70 System.out.println("遠(yuǎn)程文件大小="+remoteFileSize);

71 int i = 0;

72 if (file.exists()) {

73 // 先看看是否是完整的,完整,換名字,跳出循環(huán),不完整,繼續(xù)下載

74 long localFileSize = file.length();

75 System.out.println("已有文件大小為:"+localFileSize);

76

77 if (localFileSize remoteFileSize) {

78 System.out.println("文件續(xù)傳");

79 down(url, localFileSize, savePath + fileName);

80 }else{

81 System.out.println("文件存在,重新下載");

82 do{

83 i++;

84 fileName = fileNam.substring(0, fileNam.indexOf(".")) + "(" + i

85 + ")" + fileNam.substring(fileNam.indexOf("."));

86

87 file = new File(savePath + fileName);

88 }while(file.exists());

89 try {

90 file.createNewFile();

91 } catch (IOException e) {

92 e.printStackTrace();

93 }

94 down(url, 0, savePath + fileName);

95 }

96 // 下面表示文件存在,改名字

97

98 } else {

99 try {

100 file.createNewFile();

101 System.out.println("下載中");

102 down(url, 0, savePath + fileName);

103 } catch (IOException e) {

104 e.printStackTrace();

105 }

106 }

107 }}

108

當(dāng)前標(biāo)題:斷點(diǎn)續(xù)傳java代碼,實(shí)現(xiàn)斷點(diǎn)續(xù)傳
標(biāo)題路徑:http://muchs.cn/article34/phgose.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航全網(wǎng)營(yíng)銷推廣、外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站收錄、網(wǎng)站建設(shè)定制網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)