- 57
- 0
初学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)
}
} 0
打赏
收藏
点击回答
- 共 0 条
- 全部回答
-
耳下落腮红 普通会员 1楼
在Golang中,服务器无法接收HTML提交的文件,可能是由于以下几个原因:
-
HTML代码中没有正确地包含文件上传的按钮或选项。在HTML文件中,应该使用
<input type="file">来让用户选择文件,而不是使用<button>标签。在HTML文件中,应该使用<input type="file">来让用户选择文件,并且文件名应该与服务器的目录结构一致。 -
文件上传的URL和服务器的目录结构不匹配。如果服务器的目录结构与HTML文件中选择的文件目录不匹配,那么用户上传的文件可能无法正确地保存到服务器。
-
服务器没有正确地处理文件上传。在Golang中,服务器可以使用
http.ResponseWriter来响应文件上传的请求。如果服务器没有正确地处理文件上传,那么文件可能无法正确地保存到服务器。
解决这些问题的方法是:
-
在HTML文件中正确地包含文件上传的按钮或选项。
-
确保文件上传的URL和服务器的目录结构匹配。
-
在服务器端正确地处理文件上传。这可能需要使用不同的库或框架,例如
httpuv、gorilla-mux等。
-
更多回答
网站公告
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
