首页 > 后端开发 > Golang > 如何使用 Go 正确处理多部分/表单数据 POST 请求中的文件上传?

如何使用 Go 正确处理多部分/表单数据 POST 请求中的文件上传?

Linda Hamilton
发布: 2024-12-01 07:32:11
原创
310 人浏览过

How to Properly Handle File Uploads in Multipart/Form-Data POST Requests with Go?

Go 中的 Multipart/Form-Data POST 故障排除

在使用 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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板