This is a creation in Article, where the information may have evolved or changed.
Package Main
Import (
"FMT"
"Html/template"
"Log"
"Net/http"
"OS"
"IO"
"Crypto/md5"
"Time"
"StrConv"
"Archive/zip"
)
Var buf []byte
Func sayhelloname (w http. Responsewriter, R *http. Request) {
/*if R.method = = "Get" {
t,_:=template. Parsefiles ("index.html")
t.execute (w,nil)
}else {
fmt. Println ("...")
}
*/
t,_:=template. Parsefiles ("index.html")
t.execute (w,nil)
fmt. Println ("..")
}
Func Upload (w http. Responsewriter, r* http. Request) {
Fmt. Println ("Method:", R.method)
if R.method = = "GET" {
Crutime: = time. Now (). Unix ()
H: = MD5. New ()
Io. WriteString (H,strconv. Formatint (Crutime, 10))
Token: = FMT. Sprintf ("%x", H.sum (nil))
T, _: = template. Parsefiles ("upload.html")
T.execute (W,token)
}else {
R.parsemultipartform (<< 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, 066)
If err! = Nil {
Fmt. PRINTLN (ERR)
Return
}
Defer F.close ()
Io. Copy (f, file)
}
}
Func Download (rw http. Responsewriter, r* http. Request) {
zipname:= "Ziptest.zip"
rw. Header (). Set ("Content-type", "Application/zip")
rw. Header (). Set ("Content-disposition", FMT. Sprintf ("attachment; Filename=\ "%s\" ", Zipname))
ERR: = Getzip (rw)
If err! = Nil {
Log. Fatal (ERR)
}
}
Func getzip (w io. Writer) Error {
ZIPW: = Zip. Newwriter (W)
Defer Zipw.close ()
For I: = 0; i< 5; i++ {
F, err: = Zipw.create (StrConv. Itoa (i) + ". txt")
If err! = Nil {
return err
}
_, Err = F.write ([]byte (FMT. Sprintf ("Hello file%d", i)))
If err! = Nil {
return err
}
}
return Nil
}
Func downfile (rw http. Responsewriter, r* http. Request) {
FileName: = "1.txt"
File, err: = OS. Open (FileName);
If err! = Nil {
Fmt. fprintf (OS. Stderr, "%v\n", err)
}
Defer file. Close ()
rw. Header (). Set ("Content-disposition", "attachment; Filename=1.txt")
rw. Header (). Set ("Content-type", R.header.get ("Content-type"))
Io. Copy (Rw,file)
}
Func Main () {
http. Handlefunc ("/", Sayhelloname)
http. Handlefunc ("/upload", upload)
http. Handlefunc ("/download", download)
http. Handlefunc ("/downfile", Downfile)
ERR: = http. Listenandserve (": 9090", nil)
If err! = Nil {
Log. Fatal ("Listenandserve:", err);
}
}
346 Reads