如何使用go的net / http或类似方法保存在多部分/表单数据POST请求中收到的文件?

青年开发者

对于上下文,我正在尝试为程序ShareX(https://getsharex.com/docs/custom-uploader创建一个自定义图像上传器我尝试了很多搜索词,但是找不到该问题的任何解决方案。

这是我当前的代码(位于文件main.go中):

package main

import (
    "fmt"
    "net/http"
)

func handleUpload(w http.ResponseWriter, r *http.Request) {
    r.ParseMultipartForm(16384)
    f, fi, _ := r.FormFile("file_image")
    _ = f
    fmt.Println(fi.Filename, fi.Size)

}

func main() {
    mux := http.NewServeMux()
    mux.HandleFunc("/upload", handleUpload)
    fmt.Println("Starting listener on port 8085")
    http.ListenAndServe(":8085", mux)
}

我的目标是将从请求中接收到的文件(图像)数据保存到本地文件中,但是我无法做到这一点,因为写入文件需要type[]bytef是type multipart.File

Moficodes

这是如何处理表单数据的示例。

这里的主要思想是使用io pkg https://golang.org/pkg/io/

r.FormFile返回type的接口FileFile工具ReaderWriter方法。因此,我们可以从一个文件复制内容,然后将其写入一个空文件。

package main

import (
    "fmt"
    "io"
    "log"
    "net/http"
    "os"
)

func uploadHandler(w http.ResponseWriter, r *http.Request) {
    switch r.Method {
    case "POST":
        r.ParseMultipartForm(10 << 20) //10 MB
        file, handler, err := r.FormFile("file_image")
        if err != nil {
            log.Println("error retrieving file", err)
            http.Error(w, err.Error(), http.StatusInternalServerError)
            return
        }
        defer file.Close()
        dst, err := os.Create(handler.Filename)
        if err != nil {
            log.Println("error creating file", err)
            http.Error(w, err.Error(), http.StatusInternalServerError)
            return
        }
        defer dst.Close()
        if _, err := io.Copy(dst, file); err != nil {
            http.Error(w, err.Error(), http.StatusInternalServerError)
            return
        }
        fmt.Fprintf(w, "uploaded file")
    }
}

func main() {
    http.HandleFunc("/upload", uploadHandler)

    http.ListenAndServe(":8085", nil)
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用Java发出多部分/表单数据POST请求?

AngularJS如何上传多部分表单数据和文件?

如何在Java Servlet中处理多部分/表单数据POST请求?

如何在HTTP请求中发送多部分表单数据(用于Watson NLC培训)?

使用Objective-C POST多部分/表单数据

使用HTTPWebrequest上传文件(多部分/表单数据)

卷曲如何发布多部分/表单数据数据以及如何在Flask请求中读取多部分/表单数据

如何在多部分/表单数据请求中获取文件的实际文件大小

需要帮助以在VBA中使用post方法发布多部分表单数据

如何将Node中的多部分/表单数据POST请求转发到另一个服务

使用Express JS的多部分表单数据发布方法

使用sttp的多部分表单数据请求-Scala HTTP客户端

收到错误:uncaughtException:当对多部分/表单数据使用请求和多方时,source.on不是一个函数

如何从多部分表单数据中获取Node JS中间件中的请求正文?

使用vba发送包含当前Excel工作表的Post请求作为多部分表单数据

使用RestRserve的多部分/表单数据

使用Python通过POST多部分表单数据上传文件

Mule 4:HTTP请求程序:如何将Meta REST服务调用的多部分/表单数据作为POST正文发送?

等同于curls --form的Python:使用“ form”参数中的数据创建多部分表单数据后请求

如何在提琴手中拦截多部分/表单数据并访问作为请求一部分的二进制文件

如何在PHP上使用curl发出文件的多部分/表单数据请求和重复键

读取多部分表单数据而无需在.NET中本地保存

如何在wicket中解析多部分表单数据

使用带有多部分表单数据的 HTTP POST 请求,来自 Facebook API 的错误响应

多部分表单数据是如何工作的?

如何读取多部分/表单数据?

使用 PowerShell 上传多部分/表单数据文件

使用 UploadFile 进行直接文件上传,无需多部分/表单数据请求

如何获取多部分/表单数据?