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, "")))

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值