vla*_*mir 7 rest post webserver go
我是 GoLang 语言的新手,我想创建 REST API WebServer 来上传文件...
所以我通过向我的服务器的 POST 请求被困在主要功能(文件上传)中......
我有这条线用于调用上传功能
router.POST("/upload", UploadFile)
Run Code Online (Sandbox Code Playgroud)
这是我的上传功能:
func UploadFile( w http.ResponseWriter, r *http.Request, _ httprouter.Params ) {
io.WriteString(w, "Upload files\n")
postFile( r.Form.Get("file"), "/uploads" )
}
func postFile(filename string, targetUrl string) error {
bodyBuf := &bytes.Buffer{}
bodyWriter := multipart.NewWriter(bodyBuf)
// this step is very important
fileWriter, err := bodyWriter.CreateFormFile("file", filename)
if err != nil {
fmt.Println("error writing to buffer")
return err
}
// open file handle
fh, err := os.Open(filename)
if err != nil {
fmt.Println("error opening file")
return err
}
//iocopy
_, err = io.Copy(fileWriter, fh)
if err != nil {
panic(err)
}
bodyWriter.FormDataContentType()
bodyWriter.Close()
return err
}
Run Code Online (Sandbox Code Playgroud)
但是我在我的/upload/目录中看不到任何上传的文件...
那么我做错了什么?
PS 我收到第二个错误 => error opening file,所以我认为文件上传或从UploadFile函数获取文件有问题,对吗?如果是,那么我如何从这个函数中获取或获取文件来postFile运行?
os.Open将打开一个文件,因为该文件不存在,您将收到错误消息。相反,使用os.Create它将创建一个新文件并打开它。(参考: https: //golang.org/pkg/os/#Open)
功能打开
func Open(name string) (*File, error)打开打开指定的文件进行读取。如果成功,则可以使用返回文件上的方法进行读取;关联的文件描述符的模式为 O_RDONLY。如果有错误,则其类型为 *PathError。
函数创建
func Create(name string) (*File, error)Create 使用模式 0666(在 umask 之前)创建命名文件,如果该文件已存在,则将其截断。如果成功,返回的 File 上的方法可用于 I/O;关联的文件描述符的模式为 O_RDWR。如果有错误,则其类型为 *PathError。
编辑
创建一个新的处理程序作为示例:并且还使用 OpenFile,如所提到的:GoLang send file via POST request
func Upload(w http.ResponseWriter, r *http.Request) {
io.WriteString(w, "Upload files\n")
file, handler, err := r.FormFile("file")
if err != nil {
panic(err) //dont do this
}
defer file.Close()
// copy example
f, err := os.OpenFile(handler.Filename, os.O_WRONLY|os.O_CREATE, 0666)
if err != nil {
panic(err) //please dont
}
defer f.Close()
io.Copy(f, file)
}
Run Code Online (Sandbox Code Playgroud)