使用Go如何从Postman请求体中获取文件路径与文件名
Go文件上传报错与需求实现说明
报错原因
你遇到的空指针报错内容如下:
2021/10/13 16:25:07 http: panic serving [::1]:60170: runtime error: invalid memory address or nil pointer dereference goroutine 6 [running]:
触发原因是调用r.FormFile("video")时直接忽略了错误返回:当请求中没有匹配到name为video的文件字段时,返回的header变量为nil,此时直接访问header.Filename就会触发空指针解引用错误。
修复后可运行代码
package main import ( "fmt" "net/http" "github.com/gorilla/mux" ) func encodeFfmpeg(w http.ResponseWriter, r *http.Request) { // 无需将返回Content-Type设置为multipart/form-data,普通响应不需要该配置 _, header, err := r.FormFile("video") if err != nil { http.Error(w, "读取文件参数失败: " + err.Error(), http.StatusBadRequest) fmt.Println("参数读取错误:", err) return } fmt.Println("上传的文件名为:", header.Filename) } func main() { router := mux.NewRouter() router.HandleFunc("/encode", encodeFfmpeg).Methods("POST") fmt.Printf("Starting server at 8080 \n") http.ListenAndServe(":8080", router) }
需求说明
你想要获取客户端本地完整文件路径(例如/home/ramesh/videos/video.mp4)的需求无法实现:出于用户隐私安全限制,所有现代浏览器、Postman这类HTTP请求工具,在上传文件时都不会传递文件在客户端的完整本地路径,只会传递文件名本身,服务端默认无法拿到客户端本地的完整路径信息。
Postman配置校验
需要确认你的请求配置符合以下要求:
- 请求方法为POST,请求地址为
http://localhost:8080/encode - 请求body类型选择
form-data - 表单key字段值为
video,类型选择File(点击key输入框右侧的下拉箭头可切换类型) - 已经点击
Select Files选择了要上传的文件
你的Postman配置参考:
内容的提问来源于stack exchange,提问作者Ramesh S
相关产品推荐
相关产品推荐

