golang中的文件上传失败

时间:2016-03-06 12:01:30

标签: file go upload multipart

在我的用例中,我试图在golang中将文件上传到服务器。我有以下HTML代码,

<div class="form-input upload-file" enctype="multipart/form-data" >
    <input type="file"name="file" id="file" />
    <input type="hidden"name="token" value="{{.}}" />
    <a href="/uploadfile/" data-toggle="tooltip" title="upload">
        <input type="button upload-video" class="btn btn-primary btn-filled btn-xs" value="upload" />
    </a>
</div>

服务器端,

func uploadHandler(w http.ResponseWriter, r *http.Request) {
    // the FormFile function takes in the POST input id file
    file, header, err := r.FormFile("file")
    if err != nil {
        fmt.Fprintln(w, err)
        return
    }
    defer file.Close()

    out, err := os.Create("/tmp/uploadedfile")
    if err != nil {
        fmt.Fprintf(w, "Unable to create the file for writing. Check your write access privilege")
        return
    }
    defer out.Close()

    // write the content from POST to the file
    _, err = io.Copy(out, file)
    if err != nil {
        fmt.Fprintln(w, err)
    }

    fmt.Fprintf(w, "File uploaded successfully : ")
    fmt.Fprintf(w, header.Filename)
}

当我尝试上传文件时,我在服务器端出现request Content-Type isn't multipart/form-data错误。

有人可以帮我吗?

2 个答案:

答案 0 :(得分:2)

问题是您必须包含包含内容类型的标头。

req.Header.Add("Content-Type", writer.FormDataContentType())

这包含在mime/multipart包中。

有关工作示例,请查看this博文。

答案 1 :(得分:1)

说实话,我不知道你的HTML怎么会因为你的HTML不是形式而出错。但我认为你收到错误是因为默认表单是作为GET请求发送的,而multipart/form-data应该通过POST发送。这是最小形式的例子。

<form action="/uploadfile/" enctype="multipart/form-data" method="post">
    <input type="file" name="file" id="file" />
    <input type="hidden"name="token" value="{{.}}" />
    <input type="submit" value="upload" />
</form>