- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我想在为要求。我不想在执行此操作时使请求无效。
它工作正常,除非传入的请求有一个 multipart
form-data
,在我调用 FormValue
之后数据变得无效并且有最终路由中没有任何内容需要解析。
最佳答案
我写了一个实用函数来解决我的问题:
package utils
import (
"bytes"
"io"
"io/ioutil"
"mime"
"mime/multipart"
"net/http"
"strings"
)
// Get form values without invalidating the request body in case the data is multiform
func GetFormValues(request *http.Request, keys []string) []string {
var values []string
mediaType, params, err := mime.ParseMediaType(request.Header.Get("Content-Type"))
if err != nil || !strings.HasPrefix(mediaType, "multipart/") {
for i := range keys {
values = append(values, request.FormValue(keys[i]))
}
} else { // multi form
buf, _ := ioutil.ReadAll(request.Body)
origBody := ioutil.NopCloser(bytes.NewBuffer(buf))
var rdr = multipart.NewReader(bytes.NewBuffer(buf), params["boundary"])
for len(values) < len(keys) {
part, err_part := rdr.NextPart()
if err_part == io.EOF {
break
}
for i := range keys {
if part.FormName() == keys[i] {
buf := new(bytes.Buffer)
buf.ReadFrom(part)
values = append(values, buf.String())
}
}
}
request.Body = origBody
}
if len(values) == len(keys) {
return values
} else {
return nil
}
}
// Get form value without invalidating the request body in case the data is multiform
func GetFormValue(request *http.Request, key string) string {
if result := GetFormValues(request, []string{key}); len(result) == 1 {
return result[0]
} else {
return ""
}
}
现在不用调用
value := request.FormValue(key)
我愿意
value := utils.GetFormValue(request, key)
或多个值
values := utils.GetFormValues(request, []string{keys...})
关于http - 如何在 Golang net/http 请求中将常规 FormValue 与多部分表单数据结合起来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40644415/
我为我的处理程序编写了多个方法,例如: func DeleteProduct(w http.ResponseWriter, r *http.Request){ log.Println(r.Fo
我得到了一个 html 表单,我可以在其中输入值并将它们插入到数据库中。但是当我插入它们时,值会像“”一样出现在数据库中。 这是我插入值的方式: title, author, description
这是我的 HTML: 如果我选中所有选项并使用 r.FormValue("product_image_id") 获取选中选项的值,我将只会获得值 0。 我的意思是我只能取到第一个值,其他的值虽然
我有以下 Go 代码: package main import ( "encoding/json" "fmt" "github.com/gorilla/mux" "github.com
我只是想获取表单数据,但我不太了解该使用哪种方法。 在本文中:http://astaxie.gitbooks.io/build-web-application-with-golang/content/
我正在尝试编写一些代码来对 json API 执行一些请求。我有这个功能: apiLogin = do r FormValue (Maybe a) -- Defined in ‘Netw
我想在为要求。我不想在执行此操作时使请求无效。 它工作正常,除非传入的请求有一个 multipart form-data,在我调用 FormValue 之后数据变得无效并且有最终路由中没有任何内容需要
谁能帮我从 Eureka 表单的 MultipleSelectorRow 中检索值? 我有一个像这样的多选行,其中列出了楼层。 { $0.title = " *Floo
我正在尝试使用端点创建一个简单的 http 服务,以在 Go 中将文件下载到本地系统。该链接位于 ?uri 标记中,但是当我想要获取它时,我收到一个空字符串。我试图解析我的请求的形式,但没有帮助。这是
我不知道为什么在 POSTMAN 中发送值时总是收到一个空字符串 func main(){ rtr := mux.NewRouter() rtr.HandleFunc("/sear
例子: 1)通过模板方法呈现登录页面。例如:这是 index.html {{ define "title" }}Guestbook{{ end }} {{ define "content" }}
我想知道是否有一种方法可以将传递到具有与类属性不同 Id 的 Controller 的表单值绑定(bind)。 表单以 Person 作为具有属性 Name 的参数发送到 Controller ,但实
我尝试执行一个 http.request POST,我的数据被传递给 FormValue 而不是 Body。这是我在 Node.js http 调用中的第一个实验,所以如果问题微不足道,我深表歉意。我
我是一名优秀的程序员,十分优秀!