我正在尝试用 go 编写一个程序,它有两个部分。一部分是尝试将多张图片上传到服务器的另一部分的客户端。
服务器端应该做以下事情:
获取将要发送的文件数
循环每个文件
获取文件名
获取文件并保存
前往 3
到目前为止,服务器端正在执行以下操作:
func getFileFromClient(connection net.Conn) {
var numberOfPics int
var err error
var receivedBytes int64
var fileName string
r := bufio.NewReader(connection)
strNumberOfPics, err := r.ReadString('\n')
if err != nil {
fmt.Printf("Error reading: %s\n", err)
return
}
fmt.Printf("Read: %s\n", strNumberOfPics)
strNumberOfPics = strings.Trim(strNumberOfPics, "\n")
numberOfPics, err = strconv.Atoi(strNumberOfPics)
if err != nil {
fmt.Printf("Error Atoi: %s\n", err)
panic("Atoi")
}
fmt.Printf("Receiving %d pics:\n", numberOfPics)
for i := 0; i < numberOfPics; i++ {
// Getting the file name:
fileName, err = r.ReadString('\n')
if err != nil {
fmt.Printf("Error receiving: %s\n", err)
}
fmt.Printf("Filename: %s\n", fileName)
fileName = strings.Trim(fileName, "\n")
f, err := os.Create(fileName)
defer f.Close()
if err != nil {
fmt.Println("Error creating file")
}
receivedBytes, err = io.Copy(f, connection)
if err != nil {
panic("Transmission error")
}
fmt.Printf("Transmission finished. Received: %d \n", receivedBytes)
}
}
io.Copy 仅适用于一个文件,没有其他任何内容(因为我认为它不会清空队列)。如果我也没有,我不想每次都为每个文件重新连接。但我不确定我实际上能做些什么。
有没有人对现有的包或方法有任何建议可以提供帮助?或者示例代码?还是我完全错了,甚至用 go 试试这个是个坏主意?
我认为如果服务器能够在每次读取后刷新连接缓冲区就足够了,这样就不会读取和/或复制额外的信息。
真的很期待帮助,提前致谢
人到中年有点甜
泛舟湖上清波郎朗
相关分类