Golang + HTML5 实现多文件上传
---------------------------
今天刚好有点时间,就想试试Golang的多文件上传,下面是实现的代码。
package main
//多文件上传
//作者:LvanNeo
//邮箱:lvan_software@
//日期:2014-04-17
//Golang + HTML5 实现多文件上传
import (
"fmt"
"io"
"log"
"net/http"
"os"
"time"
)
//跳转上传页面
//作者:LvanNeo
//邮箱:lvan_software@
//日期:2014-04-17
func indexHandle(w , r *) {
defer func() {
if err := recover(); err != nil {
("获取页面失败")
}
}()
// 上传页面
().Add("Content-Type", "text/html")
(200)
html := `
Golang Upload Files
`
(w, html)
}
//处理文件上传的 Web服务方法
//作者:LvanNeo
//邮箱:lvan_software@
//日期:2014-04-17
func UploadServer(w , r *) {
defer func() {
if err := recover(); err != nil {
("文件上传异常")
}
}()
if "POST" == {
(32 << 20) //在使用前必须先调用ParseMultipartForm方法,参数为最大缓存
// ()
// (())
if != nil && != nil {
fhs := ["userfile"] //获取所有上传文件信息
num := len(fhs)
("总文件数:%d 个文件", num)
//循环对每个文件进行处理
for n, fheader := range fhs {
//获取文件名
filename :=
//结束文件
file,err := ()
if err != nil {
(err)
}
//保存文件
defer ()
f, err := (filename)
defer ()
(f, file)
//获取文件状态信息
fstat,_ := ()
//打印接收信息
(w, "%s NO.: %d Size: %d KB Name:%s\n", ().Format("2006-01-02 15:04:05"), n, ()/1024, filename)
("%s NO.: %d Size: %d KB Name:%s\n", ().Format("2006-01-02 15:04:05"), n, ()/1024, filename)
}
}
return
} else {
indexHandle(w,r)
}
}
func main() {
("Listening Port: 8086")
("/", indexHandle)
("/upload", UploadServer)
err := (":8086", nil)
if err != nil {
("ListenAndServe: ", err)
}
}