Golang的服务端无法接收HTML提交的文件
初学Golang做服务端,现在遇到了一个问题:当使用HTML提交文件的时候,浏览器可以获取服务器发送的html,但是如果本地提交的话,到浏览器端会被定位成首页,具体问题在代码中标出了,请会的同学帮忙解决一下,谢谢!
这是服务端发送的html文件:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>上传文件</title>
</head>
<body>
<form enctype="multipart/form-data" action="http//localhost:9090/upload" method="post">
<input type="file" name="uploadfile"/>
<input type="hidden" name="token" value="{{.}}"/>
<input type="submit" value="upload"/>
</form>
</body>
</html>
这是代码,还有其他的(数据库、一些校验等),我在这里都省略了,只保留了出问题的部分,能直接运行:
import (
"crypto/md5"
"fmt"
"html/template"
"io"
"net/http"
"os"
"strconv"
"time"
)
func upload(w http.ResponseWriter, r *http.Request) {
fmt.Println("method: ", r.Method) // 查看方法
if r.Method == "GET" {
curtime := time.Now().Unix()
h := md5.New()
io.WriteString(h, strconv.FormatInt(curtime, 10))
token := fmt.Sprintf("%x", h.Sum(nil))
t, _ := template.ParseFiles("upload.html")
t.Execute(w, token)
fmt.Println("upload get") // 这里能输出,也就是说可以获取服务器的消息
} else {
fmt.Println("upload post") // 这里始终进不来,提交的时候404
r.ParseMultipartForm(32 << 20)
// 获取文件句柄
file, handler, err := r.FormFile("uploadfile")
if err != nil {
fmt.Println(err)
return
}
defer file.Close()
fmt.Fprintf(w, "%v", handler.Header)
// 用于保存文件的
f, err := os.OpenFile("./test/"+handler.Filename, os.O_WRONLY|os.O_CREATE, 0666)
if err != nil {
fmt.Println(err)
return
}
defer f.Close()
io.Copy(f, file)
}
}
func main() {
http.HandleFunc("/upload", upload)
err := http.ListenAndServe(":9090", nil)
if err != nil {
fmt.Println(err)
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
可以直接上传的
很尴尬,我觉得吧...你好像地址打错了:
action="http//localhost:9090/upload"
应该是:
action="http://localhost:9090/upload"
少了引号。。或者你用相对地址好点
action="/upload"