導航:首頁 > 版本升級 > 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文件斷點上傳相關的資料

熱點內容
無法更改蘋果id賬號和密碼 瀏覽:631
安卓60lbe安全大師 瀏覽:90
湖北省事業單位領導配置文件 瀏覽:608
app倒計時任務視頻怎麼跳過 瀏覽:531
建設監理投標文件應注意哪些事情 瀏覽:660
電商有效網站是指什麼 瀏覽:805
如何導入新的數據源 瀏覽:622
探月少兒編程如何禁止旋轉 瀏覽:524
數據運營模板是什麼意思 瀏覽:440
win10fax程序下載 瀏覽:527
找同款app有哪些 瀏覽:147
linux讀取文件整個過程 瀏覽:577
百信集團的網站叫什麼名字 瀏覽:67
開發解壓app理念是什麼 瀏覽:128
linux源代碼路徑 瀏覽:854
美圖2root後不能升級了 瀏覽:133
shell文件size 瀏覽:350
通過大數據查幹部哪些內容 瀏覽:78
如何編程輸出一個數的十位數 瀏覽:760
9月7日蘋果發布會 瀏覽:150

友情鏈接