Golang GET multipart form-data

22,579

Solution 1

You can probably content yourself by using the request.ParseMultipartForm method, then use the request.FormValue to get values as usual. Note that you also have the request.MultipartForm to get access to your files.

Example:

func(w http.ResponseWriter, r *http.Request) {
    // Here the parameter is the size of the form data that should
    // be loaded in memory, the remaining being put in temporary
    // files
    r.ParseMultipartForm(0)

    fmt.Println(r.FormValue("delete"))
}

Solution 2

The part implements the io.Reader interface. I am assuming what you are really asking is how to convert the part reader into a string, in the case that it is not a file. You can do so like this:

for {
   part, err_part := read_form.NextPart()
   if err_part == io.EOF {
      break
   }
   if part.FormName() == "delete" {
      buf := new(bytes.Buffer)
      buf.ReadFrom(part)
      log.Println("delete is: ", buf.String())
   } 
}
Share:
22,579
Admin
Author by

Admin

Updated on February 11, 2020

Comments

  • Admin
    Admin over 4 years

    Let say I have a html form

    <form enctype="multipart/form-data" action="http://localhost:8080/incarcat" method="post">
        <input type="file" name="file" multiple="multiple"/>
        <input type="checkbox" name="delete" value="delete">
        <input type="submit" value="Load" />
    </form>
    

    and the following go code

    read_form, err := req.MultipartReader()
    for {
        part, err_part := read_form.NextPart()
        if err_part == io.EOF {
            break
        }
        if part.FormName() == "file" {
            //do something with files
        } else if part.FormName() == "delete" {
            //curata_folder()
            log.Println("delete is: ", part.Header.Get("delete"))
        }
    }
    

    How do i get the value of "delete"?

    part.Header.Get("delete"))
    

    it's not working