在Go语言中处理并发文件上传问题时,可以使用goroutine来实现并发上传。下面是一个简单的示例代码:
package main import ( "fmt" "io" "net/http" "os" "path/filepath" ) func main() { http.HandleFunc("/upload", uploadHandler) http.ListenAndServe(":8080", nil) } func uploadHandler(w http.ResponseWriter, r *http.Request) { if r.Method == "POST" { r.ParseMultipartForm(32 << 20) // 设置最大文件大小 file, handler, err := r.FormFile("file") if err != nil { fmt.Println(err) return } defer file.Close() filename := handler.Filename savePath := filepath.Join("./uploads", filename) out, err := os.Create(savePath) if err != nil { fmt.Println(err) return } defer out.Close() _, err = io.Copy(out, file) if err != nil { fmt.Println(err) return } fmt.Fprintf(w, "文件上传成功!") } }
在这个示例中,我们通过http.HandleFunc
函数将uploadHandler
函数绑定到/upload
路径上。在uploadHandler
函数中,我们使用r.ParseMultipartForm
函数解析表单数据,并通过r.FormFile
函数获取上传的文件。
然后,我们通过os.Create
函数创建一个文件,之后使用io.Copy
函数将上传的文件内容拷贝到新创建的文件中。最后,使用fmt.Fprintf
函数向客户端返回上传成功的消息。
这个示例中的代码是串行执行的,如果需要并发处理多个文件上传,可以将文件上传的处理放在一个goroutine中。具体实现方式可以根据实际需求进行调整。