學習 314_尚矽谷_go核心程式設計_海量使用者通訊系統 在其基礎上實現 登入後檔案傳輸到伺服器。遇到了問題,自定義了報文格式,如何實現檔案傳輸。使用 網路傳輸byte陣列
最簡單的就是用base64對byte陣列進行編碼,進過編碼後得到string傳輸到對端解碼得出byte陣列
|客戶端傳送資料到伺服器
*********************************************/
// 傳送檔案到伺服器
type sendfiletoserver struct
func
(this *sendfiletoserver)
sendfile
(filepath string
)(err error
) filename := fileinfo.
name()
filesize := fileinfo.
size()
fmt.
println
("傳送的檔名是:"
, filename)
var mes message.message
mes.type = message.sendfilemestype
open, err := os.
open
(filepath)
if err !=
nildefer open.
close()
var count int64
//傳輸資料
for//傳送到服務端
var filemes message.sendfilemes
filemes.filename = filename
//多讀取到的檔案進行編碼
encodetostring := base64.stdencoding.
encodetostring
(buf[
:readn]
) filemes.filecontext = encodetostring
data, err := json.
marshal
(filemes)
if err !=
nil mes.data =
string
(data)
data, err = json.
marshal
(mes)
if err !=
nil tr :=
&utils.transfer
err = tr.
writepkg
(data)
count +=
int64
(readn)
sendpercent :=
float64
(count)
/float64
(filesize)
*100
value := fmt.
sprintf
("%.2f"
, sendpercent)
//列印上傳進度
fmt.
println
("檔案上傳:"
+ value +
"%")
}return
}
其餘**func
(this *sendfileprocess)
receivefile
(mes *message.message)
(err error
) fmt.
println
("傳輸的檔案是:"
, filemes.filename)
openfile, err := os.
openfile
("d:/pic/"
+utils2.
getdatestr()
0666
)if err !=
nildefer openfile.
close()
//傳送使用了base64 編碼,現在解碼
decodestring, err := base64.stdencoding.
decodestring
(filemes.filecontext)
if err !=
nil openfile.
write
(decodestring)
return
}
Linux傳輸大檔案(分割傳輸)
1.分拆為多個檔案的命令 cat workspace 2018.tar.gz split b 1g workspace 2018.tar.gz.命令解釋 拆分成1g的小檔案 workspace 2018.tar.gz.是拆分後檔案的字首,預設分拆後檔名稱為workspace 2018.tar.gz....
socket 傳輸檔案
在兩台計算機傳輸檔案之前,必需得先有一台計算機建立套節子連線並繫結乙個固定得埠,並在這個埠偵聽另外一台計算機的連線請求。socket new socket addressfamily.internetwork,sockettype.stream,protocoltype.tcp socket.blo...
Ubuntu scp 傳輸檔案
scp是linux下的遠端拷貝 命令 1 將本地檔案拷貝到遠端 scp 檔名 使用者名稱 計算機ip或者計算機名稱 遠端路徑 2 從遠端將檔案拷回本地 scp 使用者名稱 計算機ip或者計算機名稱 檔名本地路徑 3 將本地目錄拷貝到遠端 scp r目錄名 使用者名稱 計算機ip或者計算機名稱 遠端路...