在使用 Go 的 mime/multipart 和 http 包发送多部分表单的上下文中,您可能会遇到某些问题,需要排除故障。让我们深入研究与创建文件字段相关的特定案例。
您有以下代码,并尝试发送包含文本字段和文件的多部分表单:
func main() { // ... // Create a file field fw, err := w.CreateFormFile("file", "filename.dat") if err != nil { return err } // ... // Send the request resp, err := http.Post(url, w.FormDataContentType(), &buffer) if err != nil { return err } // ... }
但是,您正在努力解决如何获得 Reader 将文件读入文件字段写入器的问题fw.
要解决此问题,您需要使用 os.Open 打开文件,并将返回的 *os.File 作为 io.Writer 传递给 CreateFormFile 函数。这是更正后的代码:
import ( "bytes" "io" "mime/multipart" "net/http" "os" ) func main() { // ... // Open the file fd, err := os.Open("filename.dat") if err != nil { return err } // Create a file field fw, err := w.CreateFormFile("file", "filename.dat") if err != nil { return err } // Copy the file contents into the file field writer _, err = io.Copy(fw, fd) if err != nil { return err } // ... // Send the request resp, err := http.Post(url, w.FormDataContentType(), &buffer) if err != nil { return err } // ... }
通过此修改,文件的内容将正确写入多部分表单,使您可以成功发送文本字段和文件。
以上是如何使用 Go 正确处理多部分/表单数据 POST 请求中的文件上传?的详细内容。更多信息请关注PHP中文网其他相关文章!