uploadOne.html代码如下:

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<form action="http://127.0.0.1:9090/uploadOne" method="post" enctype="multipart/form-data">
文件:<input type="file" name="file" value="">
<input type="submit" value="提交">
</form>
</body>
</html>

uploadMore.html代码如下:

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<form action="http://127.0.0.1:9090/uploadMore" method="post" enctype="multipart/form-data">
文件:<input type="file" name="file" value=""><br>
文件:<input type="file" name="file" value=""><br>
文件:<input type="file" name="file" value=""><br>
<input type="submit" value="提交">
</form>
</body>
</html>

main.go代码如下:

package main

import (
"net/http"
"os"
"io"
"html/template"
"log"
) func uploadOne(w http.ResponseWriter, r *http.Request) {
//判断请求方式
if r.Method == "POST" {
//设置内存大小
r.ParseMultipartForm(32 << 20);
//获取上传的第一个文件
file, header, err := r.FormFile("file");
defer file.Close();
if err != nil {
log.Fatal(err);
}
//创建上传目录
os.Mkdir("./upload", os.ModePerm);
//创建上传文件
cur, err := os.Create("./upload/" + header.Filename);
defer cur.Close();
if err != nil {
log.Fatal(err);
}
//把上传文件数据拷贝到我们新建的文件
io.Copy(cur, file);
} else {
//解析模板文件
t, _ := template.ParseFiles("./uploadOne.html");
//输出文件数据
t.Execute(w, nil);
}
} func uploadMore(w http.ResponseWriter, r *http.Request) {
if r.Method == "POST" {
//设置内存大小
r.ParseMultipartForm(32 << 20);
//获取上传的文件组
files := r.MultipartForm.File["file"];
len := len(files);
for i := 0; i < len; i++ {
//打开上传文件
file, err := files[i].Open();
defer file.Close();
if err != nil {
log.Fatal(err);
}
//创建上传目录
os.Mkdir("./upload", os.ModePerm);
//创建上传文件
cur, err := os.Create("./upload/" + files[i].Filename);
defer cur.Close();
if err != nil {
log.Fatal(err);
}
io.Copy(cur, file);
}
} else {
//解析模板文件
t, _ := template.ParseFiles("./uploadMore.html");
//输出文件数据
t.Execute(w, nil);
}
} func main() {
http.HandleFunc("/uploadMore", uploadMore);
http.HandleFunc("/uploadOne", uploadOne);
err := http.ListenAndServe(":9090", nil);
if err != nil {
log.Fatal(err);
}
}

通过http://127.0.0.1:9090/uploadOne和http://127.0.0.1:9090/upladMore来测试文件上传。

go语言处理文件上传和多个文件上传的更多相关文章

  1. HTTP文件上传服务器-支持超大文件HTTP断点续传的实现办法

    最近由于笔者所在的研发集团产品需要,需要支持高性能的大文件http上传,并且要求支持http断点续传.笔者在以前的博客如何实现支持大文件的高性能HTTP文件上传服务器已经介绍了实现大文件上传的一些基本 ...

  2. 上传本地文件到github(码云)上(小乌龟方式,sourcetree方式)

    一:上传文件到 github 1.打开 https://github.com/ 登录github账号(没有的自己创建),点击右上角创建新仓库 在打开的页面中填写  名字 点击 Create repos ...

  3. 上传漏洞科普[1]-文件上传表单是Web安全主要威胁

    为了让最终用户将文件上传到您的网站,就像是给危及您的服务器的恶意用户打开了另一扇门.即便如此,在今天的现代互联网的Web应用程序,它是一种 常见的要求,因为它有助于提高您的业务效率.在Facebook ...

  4. SWFUpload多图上传、C#后端跨域传文件带参数

    前几天工作中用到了SWFUpload上传图片,涉及到跨域,因为前端无法实现跨域,所以只能把文件传到后端进行跨域请求,整理分享下. 效果图 前端 html部分 <!DOCTYPE html> ...

  5. PHP上传(单个)文件示例

    通过 PHP,可以把文件上传到服务器. 创建一个文件上传表单 允许用户从表单上传文件是非常有用的. 请看下面这个供上传文件的 HTML 表单: <html> <body> &l ...

  6. ASP.NET中的文件操作(文件信息,新建,移动,复制,重命名,上传,遍历)(亲测详细)

    做了几天的文件操作,现在来总结一下,错误之处,还望指点!以文件为例,如果对文件夹操作,基本上将File换为Directory即可(例:FileInfo file = new FileInfo(Path ...

  7. PHP设计的超强大的文件上传类(单文件上传)

    form.html <!DOCTYPE html> <html> <head> <title>文件上传</title> </head& ...

  8. 解决IIS7.0服务和用户上传的文件分别部署在不同的电脑上时,解决权限的问题

    为解决IIS服务和用户上传的文件分别部署在不同的电脑上时,解决权限的问题. 定义: A:iis服务器 B:文件服务器 步骤: 1.在B上创建一个用户[uploaduser](并设置密码) 2.给B上的 ...

  9. php 上传文件实例 上传并下载word文件

    上传界面 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3 ...

随机推荐

  1. Grafana+Zabbix使用配置

    官方提供的网友分享的图形面板,可以自行选择使用下载---  https://grafana.com/dashboards   Grafana 是 Graphite 和 InfluxDB 仪表盘和图形编 ...

  2. mysql 去除字符串中前后空格

     update  table  set  field = replace(replace(replace(field,char(9),''),char(10),''),char(13),''); 

  3. 代码规范【经理培训内容记录】[有参考:http://kb.cnblogs.com/page/179593/]

    一.命名规范 方法:所有首字母大写,如BloodControl; 类:所有首字母大写: 变量:第一个首字母小写,其他首字母大写:如bloodControl; 常量:全部字母大写,可用下划线分隔:如BL ...

  4. crontab详细用法

    使用crontab你可以在指定的时间执行一个shell脚本或者一系列Linux命令.例如系统管理员安排一个备份任务使其每天都运行 如何往 cron 中添加一个作业? # crontab –e0 5 * ...

  5. React设置宽度的坑

    [React设置宽度的坑] 我们知道通过ref可以获取DOM元素,通过style属性可以给此DOM元素添加样式. 但下面两行的赋值是无效的: this.HomeRootDiv.style.width= ...

  6. git桌面工具下载git源码

    第一步,登陆githup,搜索自己需要查看的代码. 并复制clone url. 第二步,复制下载资源:选择菜单--FILE--CLONE

  7. jvm参考网页

    --------------------------------------------- https://www.e-learn.cn/content/wangluowenzhang/37475 h ...

  8. 如何用 Postman 处理 json请求格式

    下边是其他博友写的 http://blog.163.com/huan12_8/blog/static/130519090201611711213719/

  9. 【Spider】学习使用XMLFeedSpider

    前面写了学习CrawlSpider遇到的问题后,今天学XMLFeedSpider又出现了启动后没爬取到数据,但又不报错的情况 经过排查,发现又是一个粗心大意的错误: class SpiderUserX ...

  10. python--第五天总结

    装饰器-- @ 重命名原函数,返回函数对象 是一个函数,至少两层执行函数,被装饰的函数作为参数----------------------------------------------------1 ...