Go语言实现简单的登录和文件上传
最近学习Go Web编程,先学了个基础的登录和文件上传,使用的是Go语言自带的net/http包
Go语言处理请求非常简单,调用http.ListenAndServe函数,监听对应端口,然后http.HandleFunc函数根据请求路径调用不同函数
主函数如下
func main() {
http.HandleFunc("/",handleRequest)
http.HandleFunc("/login",login)
http.HandleFunc("/upload",upload)
//监听8080端口
err:=http.ListenAndServe(":8080",nil)
if err!=nil{
log.Fatal("err:",err)
}
}
先po上咱用的html文件:login.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="http://localhost:8080/login" method="post">
<input type="text" name="username">
<input type="password" name="password">
<input type="submit" value="登录">
</form>
<br>
上传文件
<form action="http://localhost:8080/upload" method="post" enctype="multipart/form-data">
<input type="file" name="uploadfile"/>
<input type="submit" value="upload">
</form>
</body>
</html>
先看login方法
func login(w http.ResponseWriter,r *http.Request){
fmt.Println("method",r.Method)
if r.Method =="GET"{
t,_:=template.ParseFiles("login.html")
t.Execute(w,nil)
}else{
r.ParseForm()
fmt.Println("username",r.Form["username"])
fmt.Println("password",r.Form["password"])
fmt.Fprintf(w,"登录成功")
}
}
拿到请求r后,判断是什么请求方法,如果是get方法,返回login.html文件
如果是post方法,代表这是进行登录操作了,然后使用ParesForm()方法,这个方法会解析出r.Form和r.PoatForm,不先调用这个方法,是获取不到表单中的值的
r.Form底层是一个map,所以可以用表单中的name来获取value
控制台输出
这里的123d都是我乱打进去的
再看upload方法
func upload(writer http.ResponseWriter, r *http.Request) {
r.ParseMultipartForm(32<<10)
file,handler,err:=r.FormFile("uploadfile")
if err!=nil{
fmt.Fprintf(writer,"上传出错")
fmt.Println(err)
return
}
defer file.Close()
f,err:=os.OpenFile("./test"+handler.Filename,os.O_WRONLY|os.O_CREATE,0666)
if err!=nil{
fmt.Println(err)
fmt.Fprintf(writer,"上传出错")
return
}
defer f.Close()
io.Copy(f,file)
fmt.Fprintf(writer,"上传成功")
}
ParseMultipartForm()这个函数是解析上传来的文件的,参数交maxMemory,文件小与等于maxMemory的部分存在内存中,多出的部分存在系统的临时文件中。它在必要情况下,会调用一下ParseForm(),解析请求提
FormFile返回我们一个文件File类型的对象,就是上传的文件,handler是里面是文件的一些信息
os.OpenFile函数开启一个我们将写入的文件,os.O_WRONLY|os.O_CREATE代表的是打开模式,以只写模式打开,并且文件不存在就创建一个,0666代表的是文件模式,有读写权限
然后就没什么难懂的了。
看我演示
选择一个图片
点击上传,成功了
看目录里面已经有了这个图片