1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > go接收文件服务器 请教:html5批量文件上传 服务端go怎么接收多个文件?

go接收文件服务器 请教:html5批量文件上传 服务端go怎么接收多个文件?

时间:2022-04-05 01:27:04

相关推荐

go接收文件服务器 请教:html5批量文件上传 服务端go怎么接收多个文件?

该楼层疑似违规已被系统折叠隐藏此楼查看此楼

//多文件批量上传

func upload(w http.ResponseWriter, r *http.Request) {

r.ParseMultipartForm(64 << 20) //64MB内存buffer

var uplFail, upSucc int

var rename string

for _, fileHeader := range r.MultipartForm.File["uploadfile"] {

srcFile, err := fileHeader.Open()

if err != nil {

log.Println(err)

return

}

fpath := filepath.Join(curDir, fileHeader.Filename)

originPath := fpath

for {

_, err := os.Stat(fpath)

if err == nil {

//如果文件存在,则重命名上传文件(.扩展名前加"_New")

suffix := filepath.Ext(fpath)

withoutSuf := strings.TrimSuffix(fpath, suffix)

fpath = withoutSuf + "_New" + suffix

} else {

break

}

}

if originPath != fpath {

rename = rename + fmt.Sprintf("%-s&nbsp&nbsp上传后被重命名为:&nbsp&nbsp%-s ", originPath, fpath)

}

dstFile, err := os.Create(fpath) //创建上传文件

if err != nil {

log.Println(err)

srcFile.Close()

return

}

_, err = io.Copy(dstFile, srcFile)

if err != nil {

uplFail++

} else {

log.Printf("%s upload %q success\n", r.RemoteAddr[:strings.LastIndex(r.RemoteAddr, ":")], filepath.Join(root, dstFile.Name()))

upSucc++

}

srcFile.Close() //这里是循环,避免用defer *.Close()

dstFile.Close()

}

fmt.Fprintf(w, "

上传失败:%d, 成功:%d

%s

", uplFail, upSucc, rename, curDir, 1+len(strings.Split(rename, "")))

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。