【发布时间】:2021-12-01 20:49:01
【问题描述】:
这个问题已经问过了,但它不能解决我的问题。
在我的Go 项目中无法打印路径和文件名。它显示如下错误:
2021/10/13 16:25:07 http: panic serving [::1]:60170: runtime error: invalid memory address or nil pointer dereference goroutine 6 [running]:
我的代码
package main
import (
"fmt"
"net/http"
"github.com/gorilla/mux"
)
func encodeFfmpeg(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "multipart/form-data")
_, header, _ := r.FormFile("video")
fmt.Println(header.Filename)
}
func main() {
router := mux.NewRouter()
router.HandleFunc("/encode", encodeFfmpeg).Methods("POST")
// config port
fmt.Printf("Starting server at 8080 \n")
http.ListenAndServe(":8080", router)
}
我正在尝试使用路径打印文件名例如:/home/ramesh/videos/video.mp4
【问题讨论】:
-
FormFile返回错误。在接触FormFile返回的任何其他值之前检查错误。如果错误不是nil,那么header很可能是nil,表达式header.Filename将 恐慌。 -
设置
w.Header().Set("Content-Type", "multipart/form-data")不会以任何方式修改r。除非您还使用有效负载进行响应,即编写该特定内容类型的响应正文,否则将其放在那里毫无意义。 -
@mkopriva: 我添加了`_, header, err := r.FormFile("video") if err != nil { panic(err) } ` 它显示了这个错误
http: panic serving [::1]:60476: no multipart boundary param in Content-Type goroutine 6 [running]:跨度> -
表示Postman请求的
Content-Type标头中的boundary参数缺失。multipart/form-data需要此参数才能正常工作。看到这个answer(边界在底部提到)。