duke-git / lancet

A comprehensive, efficient, and reusable util function library of Go.

Home Page:https://www.golancet.cn/en/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

http函数包能否添加上传文件的支持

Mickls opened this issue · comments

commented

我发现http包内的setFormData函数仅能支持application/x-www-form-urlencoded格式,并不支持multipart/form-data格式。无法通过SendRequest函数来实现上传文件的功能。
本来是打算提一个pr看看能否直接添加支持,不过在实现后发现ut测试需要一个支持上传文件的url地址来做支撑。如果可以的话也可以给出一个相应的接口,我可以实现这个功能。
或者,考虑再多新增一个mock的工具类?

@Mickls 确实需要支持mutipart,欢迎提PR🤝. 可以实现一个本地mock api. 参考以下:

package main

import (
	"io"
	"log"
	"net/http"
)

func main() {
	http.HandleFunc("/upload", handleUploadFile)
	http.ListenAndServe(":8090", nil)
}

func handleUploadFile(w http.ResponseWriter, r *http.Request) {
	log.Println("Content-Type: ", r.Header.Get("Content-Type"))

	if err := r.ParseMultipartForm(0); err != nil {
		log.Fatal(err)
		return
	}

	file, header, err := r.FormFile("file")
	log.Println("Upload file info: ", file, header, err)

	w.Header().Set("Content-Type", "text/json")

	io.WriteString(w, "ok")
}

image
image

参考 #76

commented

@Mickls 确实需要支持mutipart,欢迎提PR🤝. 可以实现一个本地mock api. 参考以下:

package main

import (
	"io"
	"log"
	"net/http"
)

func main() {
	http.HandleFunc("/upload", handleUploadFile)
	http.ListenAndServe(":8090", nil)
}

func handleUploadFile(w http.ResponseWriter, r *http.Request) {
	log.Println("Content-Type: ", r.Header.Get("Content-Type"))

	if err := r.ParseMultipartForm(0); err != nil {
		log.Fatal(err)
		return
	}

	file, header, err := r.FormFile("file")
	log.Println("Upload file info: ", file, header, err)

	w.Header().Set("Content-Type", "text/json")

	io.WriteString(w, "ok")
}

image image

看上去可行,我去实现下

v2.2.2版本已添加改特性