導航:首頁 > 版本升級 > java文件斷點上傳

java文件斷點上傳

發布時間:2024-11-27 08:42:01

『壹』 java中的」斷點「是什麼意思

這個不太難吧?
假設a給b傳文件f(1024位元組)。第一次b接收了512位元組,那麼第二次連接a就應該從513位元組開始傳輸。
也就是說,在第二次傳輸時,b要提供「我要從513位元組開始傳送文件f」的信息,然後a使用fileinputstream構建輸入流讀取本地文件,使用skip(512)方法跳過文件f的前512位元組再傳送文件,之後b將數據追加(append)到先前接收的文件末尾即可。
進一步考慮,如果要實現多線程傳送,即分塊傳輸,也同樣的道理。假如b要求分作兩塊同時傳輸,那麼a啟動兩個線程,一個從513位元組讀到768位元組(工256位元組),第二個線程從769位元組到1024位元組即可。
如果你要從網路上下載文件,就是說a方不是你實現的,那麼你要先確認a方支不支持斷電續傳功能(http1.1),然後你查閱下http1.1協議,在http1.1版本里,可以通過設置請求包頭某個欄位的信息(使用urlconnection創建連接並使用setrequestproperty(stringkey,stringvalue)方法設置)從而精確讀取文件的某一段數據的。注意,基於http斷點續傳的關鍵是1.1版本,1.0版本是不支持的。
補充:
嗯,查到了,是設置range屬性,即setrequestproperty("range","bytes=513-1024").你可以使用迅雷下載某個文件,然後從」線程信息「中就可以看到這個http1.1斷點續傳的所有行為信息了。

『貳』 java 函數設置一個斷點,調試時結果一直等待進不去

一、在瀏覽器中F12打開調試,進入NetWork選項下,如果你請求能夠發送成功則,有請求的顯示,如果請求失敗則該調試中不會有請求展示出來。如圖:

二、看你後台打的斷點,如果斷點是一個小圓點則標示請求未過去,仔細檢查你的請求路徑、請求代碼寫的是不是有問題吧。如果斷點是一個帶尾巴的圓點,表示請求能進去,重新編譯項目順便清一下Tomcat下項目緩存吧

最後這種小問題不建議你一直浪費時間,還不如重新寫一遍快呢

『叄』 java ftp上傳時斷網,文件損壞

以二進制流上傳,然後實現斷點續傳。

/**
* 上傳文件到FTP伺服器,支持斷點續傳
* @param local 本地文件名稱,絕對路徑
* @param remote 遠程文件路徑,使用/home/directory1/subdirectory/file.ext 按照Linux上的路徑指定方式,支持多級目錄嵌套,支持遞歸創建不存在的目錄結構
* @return 上傳結果
* @throws IOException
*/
public UploadStatus upload(String local,String remote) throws IOException{
FTPClient ftpClient = new FTPClient();
//設置PassiveMode傳輸
ftpClient.enterLocalPassiveMode();
//設置以二進制流的方式傳輸
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
UploadStatus result;
//對遠程目錄的處理
String remoteFileName = remote;
if(remote.contains("/")){
remoteFileName = remote.substring(remote.lastIndexOf("/")+1);
String directory = remote.substring(0,remote.lastIndexOf("/")+1);
if(!directory.equalsIgnoreCase("/")&&!ftpClient.changeWorkingDirectory(directory)){
//如果遠程目錄不存在,則遞歸創建遠程伺服器目錄
int start=0;
int end = 0;
if(directory.startsWith("/")){
start = 1;
}else{
start = 0;
}
end = directory.indexOf("/",start);
while(true){
String subDirectory = remote.substring(start,end);
if(!ftpClient.changeWorkingDirectory(subDirectory)){
if(ftpClient.makeDirectory(subDirectory)){
ftpClient.changeWorkingDirectory(subDirectory);
}else {
System.out.println("創建目錄失敗");
return UploadStatus.Create_Directory_Fail;
}
}

start = end + 1;
end = directory.indexOf("/",start);

//檢查所有目錄是否創建完畢
if(end <= start){
break;
}
}
}
}

//檢查遠程是否存在文件
FTPFile[] files = ftpClient.listFiles(remoteFileName);
if(files.length == 1){
long remoteSize = files[0].getSize();
File f = new File(local);
long localSize = f.length();
if(remoteSize==localSize){
return UploadStatus.File_Exits;
}else if(remoteSize > localSize){
return UploadStatus.Remote_Bigger_Local;
}

//嘗試移動文件內讀取指針,實現斷點續傳
InputStream is = new FileInputStream(f);
if(is.skip(remoteSize)==remoteSize){
ftpClient.setRestartOffset(remoteSize);
if(ftpClient.storeFile(remote, is)){
return UploadStatus.Upload_From_Break_Success;
}
}

//如果斷點續傳沒有成功,則刪除伺服器上文件,重新上傳
if(!ftpClient.deleteFile(remoteFileName)){
return UploadStatus.Delete_Remote_Faild;
}
is = new FileInputStream(f);
if(ftpClient.storeFile(remote, is)){
result = UploadStatus.Upload_New_File_Success;
}else{
result = UploadStatus.Upload_New_File_Failed;
}
is.close();
}else {
InputStream is = new FileInputStream(local);
if(ftpClient.storeFile(remoteFileName, is)){
result = UploadStatus.Upload_New_File_Success;
}else{
result = UploadStatus.Upload_New_File_Failed;
}
is.close();
}
return result;
}

閱讀全文

與java文件斷點上傳相關的資料

熱點內容
數據中台交付架構師是做什麼的 瀏覽:497
微信語音包怎麼轉成手機文件 瀏覽:477
在終端打開文件夾 瀏覽:442
藍拳90版本能量9加點 瀏覽:41
動態血壓儀哪裡看到數據 瀏覽:449
curlh頭文件 瀏覽:610
什麼app有最後在線時間 瀏覽:646
sd30文件系統 瀏覽:573
win10安裝iso文件下載 瀏覽:899
手機微信沒有文件傳輸 瀏覽:918
王者保存的視頻在文件夾哪個地方 瀏覽:392
grubcfg代碼 瀏覽:565
錄小說哪個網站好 瀏覽:917
word2007列印預覽 瀏覽:658
騰訊緩存的視頻在手機哪個文件 瀏覽:536
蘇寧易購蘋果6s最新報價 瀏覽:384
查看linuxarp表 瀏覽:67
授權文件名什麼意思 瀏覽:806
爐石傳說盒子20版本停止更新公告 瀏覽:245
ps修改文件畫布尺寸的方法 瀏覽:258

友情鏈接