您好,登錄后才能下訂單哦!
這篇文章主要介紹“怎么使用Golang實現斷點續傳功能”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“怎么使用Golang實現斷點續傳功能”文章能幫助大家解決問題。
1、將文件pic_src.jpg復制到pic_des.jpg文件;
2、讀寫過程中斷時,讀寫的中斷位置會記錄在“pic_des.jpgtemp.txt”文件里;
3、下次再啟動程序時,程序會接著“pic_des.jpgtemp.txt”文件里記錄的中斷位置,繼續讀、寫文件,直到完成傳輸;
具體代碼實現,如下:
package main import ( "fmt" "os" "strconv" "io" "log" //"time" ) func main() { /* 斷點續傳: 文件傳遞:文件復制 srcFile 復制到 destFile 思路: 邊復制,邊記錄復制的總量(記錄總復制字節數保存至tempFile) 復制一半中斷后,若再次復制,會先讀取tempFile文件里記錄的已完成字節總數 然后將這個字節數作為文件讀寫offset(偏移量), 來結合whence(偏移位置)來決定后面讀寫文件的起點位置。 seek(offset,whence),設置指針光標的位置 第一個參數:偏移量 第二個參數:如何設置 0:seekStart表示相對于文件開始, 1:seekCurrent表示相對于當前偏移量, 2:seek end表示相對于結束。 */ srcFile:="./0731/ddxc/pic_src.jpg" destFile:="./0731/ddxc/pic_des.jpg" tempFile:=destFile+"temp.txt" file1,err:=os.Open(srcFile) if err !=nil { log.Fatalln(err) } file2,_:=os.OpenFile(destFile,os.O_CREATE|os.O_WRONLY,os.ModePerm) file3,_:=os.OpenFile(tempFile,os.O_CREATE|os.O_RDWR,os.ModePerm) defer file1.Close() defer file2.Close() //1.讀取臨時文件中的數據,根據seek file3.Seek(0,io.SeekStart) bs:=make([]byte,100,100) n1,err:=file3.Read(bs) fmt.Println(n1) countStr:=string(bs[:n1]) fmt.Println(countStr) count,_:=strconv.ParseInt(countStr,10,64) fmt.Println(count) //2. 設置讀,寫的偏移量 file1.Seek(count,0) // 設置file1下一次讀或者寫的起點 file2.Seek(count,0) // 設置file2下一次讀或者寫的起點 data:=make([]byte,1024,1024) n2:=-1// 讀取的數據量, 默認值 n3:=-1//寫出的數據量 total :=int(count)//讀取的總量 for{ //3.讀取數據 // 基于上面的起點,讀取file1文件len(data)個字節, // n2:實際讀取的字節數(小于等于len(data),將讀取的字節存入data。 n2,err=file1.Read(data) if err ==io.EOF{ fmt.Println("文件復制完畢。。") file3.Close() //os.Remove(tempFile) //復制完,先不刪除,驗證最后存儲的字節總數是不是跟復制的文件大小一致。 break } //將數據寫入到目標文件 // 基于上面的起點,向file2文件寫入len(data[:n2])個字節,也就是寫入data中前n2個元素; // n3:實際寫入的字節數(小于等于n2)。 n3,_=file2.Write(data[:n2]) total += n3 //將復制總量,存儲到臨時文件中 file3.Seek(0,io.SeekStart) // 設置file3的下次讀寫起點為源點:0點,即覆蓋重寫。 file3.WriteString(strconv.Itoa(total)) //假裝斷電 //if total>1800000{ // panic("假裝斷電了。。。,假裝的。。。") //} } }
4、檢驗下: 當文件復制完成后,pic_des.jpgtemp.txt文件里保存的字節數剛好等于傳輸文件大小,說明文件完整復制。
如下圖:
關于“怎么使用Golang實現斷點續傳功能”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。