Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >golang简单获取上传文件大小的实现代码

golang简单获取上传文件大小的实现代码

作者头像
李海彬
发布于 2018-03-26 07:08:08
发布于 2018-03-26 07:08:08
3.9K1
举报
文章被收录于专栏:Golang语言社区Golang语言社区
package main import ( "fmt" "io" "net/http" "log" "os" ) // 获取文件大小的接口 type Size interface { Size() int64 } // 获取文件信息的接口 type Stat interface { Stat() (os.FileInfo, error) } // hello world, the web server func HelloServer(w http.ResponseWriter, r *http.Request) { if "POST" == r.Method { file, _, err := r.FormFile("userfile") if err != nil { http.Error(w, err.Error(), 500) return } if statInterface, ok := file.(Stat); ok { fileInfo, _ := statInterface.Stat() fmt.Fprintf(w, "上传文件的大小为: %d", fileInfo.Size()) } if sizeInterface, ok := file.(Size); ok { fmt.Fprintf(w, "上传文件的大小为: %d", sizeInterface.Size()) } return } // 上传页面 w.Header().Add("Content-Type", "text/html") w.WriteHeader(200) html := ` <form enctype="multipart/form-data" action="/hello" method="POST"> Send this file: <input name="userfile" type="file" /> <input type="submit" value="Send File" /> </form> ` io.WriteString(w, html) } func main() { http.HandleFunc("/hello", HelloServer) err := http.ListenAndServe(":12345", nil) if err != nil { log.Fatal("ListenAndServe: ", err) } }
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-05-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Golang语言社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
1 条评论
热度
最新
把接收的 multipart.File 类型转换成 Size interface 和 Stat interface,没有看到 multipart.File 类型实现接口方法, multipart.File 也是接口类型,为什么直接就可以转成 Size interface 和 Stat interface ,接收到文件的真实类型是啥,难道真实类型实现了这两个方法,那直接把它转换为真实类型不就行了,为什么还要自己定义接口? Size interface 定义的方法Size() int64 和 Stat interface 定义的方法Stat() (os.FileInfo, error) ?
把接收的 multipart.File 类型转换成 Size interface 和 Stat interface,没有看到 multipart.File 类型实现接口方法, multipart.File 也是接口类型,为什么直接就可以转成 Size interface 和 Stat interface ,接收到文件的真实类型是啥,难道真实类型实现了这两个方法,那直接把它转换为真实类型不就行了,为什么还要自己定义接口? Size interface 定义的方法Size() int64 和 Stat interface 定义的方法Stat() (os.FileInfo, error) ?
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
精通Go语言文件上传:深入探讨r.FormFile函数的应用与优化
在 Web 开发中,文件上传是一项常见的功能需求,用于允许用户向服务器提交文件,如图像、文档、视频等。Go 语言作为一门强大的服务器端编程语言,提供了方便且高效的方式来处理文件上传操作。其中,r.FormFile 函数是 Go 语言中处理 HTTP 请求中文件上传的关键函数之一。
繁依Fanyi
2024/04/02
5260
golang学习之文件上传
首先是上传页面upload.html: <!doctype html> <html> <head> <meta charset="utf-8"> <title>Upload</title> </hea
用户1141560
2017/12/26
1K0
go上传文件
cmd: F:\gorun\src\HelloWorld>go run index.go 就行了
贵哥的编程之路
2024/03/14
1500
go上传文件
go上传文件预览
cmd: F:\gorun\src\HelloWorld>go run index.go 就行了
贵哥的编程之路
2024/03/14
1090
go上传文件预览
go上传附件
package main import ( "fmt" "html/template" "io" "log" "net/http" "os" ) //上传方法 func upload(w http.ResponseWriter, r *http.Request) { //这里是get请求 if r.Method == "GET" { t, _ := template.ParseFiles("upload.html") t.Execute(w, nil) } else if r.Method == "POST" { // 服务端调用r.ParseMultipartForm,把上传的文件存储在内存和临时文件中 32 << 20 是一个很大的值:33554432 r.ParseMultipartForm(32 << 20) //这里获取表单的uploadfile file, handler, err := r.FormFile("uploadfile") if err != nil { fmt.Println(err) return } defer file.Close() //这里打开文件buffer f, err := os.OpenFile("./upload/"+handler.Filename, os.O_WRONLY|os.O_CREATE, 0666) if err != nil { fmt.Println(err) return } defer f.Close() //把文件cp到指定目录下。 io.Copy(f, file) fmt.Fprintf(w, "%v", handler.Header) fmt.Fprintf(w, "上传成功") } else { fmt.Println("error") } } func main() { http.HandleFunc("/upload", upload) err := http.ListenAndServe(":8081", nil) if err != nil { log.Fatal("ListenAndServe:", err) } } ------------------------------------------------------------ <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>go 上传test</title> </head> <body> <form method="POST" action="/upload" enctype="multipart/form-data" > <input type="file" name="uploadfile" /> <input type="submit" value="上传"> </form> </body> </html>
公众号-利志分享
2022/04/25
1.2K0
文件上传下载
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 == "Ge
李海彬
2018/03/27
1.2K0
Golang 获取GET、POST参数及处理上传多个文件
http.request的三个属性Form、PostForm、MultipartForm:
IT工作者
2022/06/30
2.1K0
Go Web---Web服务器
http 是比 tcp 更高层的协议,它描述了网页服务器如何与客户端浏览器进行通信。Go 提供了 net/http 包,我们马上就来看下。
大忽悠爱学习
2022/08/23
12K0
Go Web---Web服务器
go client http post upload上传及 server 参数获取
首先需要知道client是如何通过 http 协议 实现信息和参数的传递,以及server是怎么接受参数.
solate
2019/07/22
5.5K0
利用go+vue快速开发一个web系统
IT不难
2024/06/01
3810
利用go+vue快速开发一个web系统
golang的HTTP基本认证机制实例详解
本文实例讲述了golang的HTTP基本认证机制。分享给大家供大家参考,具体如下: 看了<<http权威指南>>第12章HTTP基本认证机制(本站下载地址:http://www.jb51.net/books/93254.html),感觉讲的蛮详细的,写了一个小小例子测试. 请求响应过程: 复制代码代码如下: ==> GET /hello HTTP/1.1 Host: 127.0.0.1:12345 <== HTTP/1.1 401 Unauthorized WWW-Authenticate: Basic
李海彬
2018/03/22
7200
学习笔记|用Go写一个简单的接口实现(任意聊天工具)主机上线通知
var xhr = new XMLHttpRequest(); xhr.open('get', 'https://v1.hitokoto.cn/'); xhr.onreadystatechange = function () { if (xhr.readyState === 4) { var data = JSON.parse(xhr.responseText); var hitokoto = document.getElementById('hitokoto'); hitokoto.innerText = data.hitokoto; } } xhr.send();
TRY博客-简单的网络技术
2022/09/08
3390
学习笔记|用Go写一个简单的接口实现(任意聊天工具)主机上线通知
io.Writer 解析
简介 io.Writer 跟 io.Reader 一样,都是 Interface 类型,功能非常强大,在任何需要写入数据,处理数据流的地方,我们都应该尽可能使用这两个类型的对象。 io.Writer 的原型: type Writer interface { Write(p []byte) (n int, err error) } 跟 io.Reader 类似,一个对象只要实现了 Write() 函数,这个对象就自动成为 Writer 类型。 常见 Writer 类型 文件操作 使用 os.Creat
李海彬
2018/03/28
1.9K0
Go语言之搭建服务端接收前端文件上传
HTML表单(form)enctype(Encode Type)属性控制表单在提交数据到服务器时数据的编码类型.
IT工作者
2022/03/29
2.2K0
Go-HTTP服务(四)
客户端可以通过HTTP请求头的方式向服务器发送数据。在Go语言中,我们可以通过http.Request对象的Header.Get()方法来获取HTTP请求头。
堕落飞鸟
2023/04/23
2290
Go 每日一库之 gorilla/handlers
上一篇文章中,我们介绍了 gorilla web 开发工具包中的路由管理库gorilla/mux,在文章最后我们介绍了如何使用中间件处理通用的逻辑。在日常 Go Web 开发中,开发者遇到了很多相同的中间件需求,gorilla/handlers(后文简称为handlers)收集了一些比较常用的中间件。一起来看看吧~
用户7731323
2021/07/23
4300
Golang Gin框架HTTP上传文件
HTTP协议的文件上传是通过HTTP POST请求实现的,使用multipart/form-data格式将待上传的文件放入请求体中。
地球流浪猫
2023/10/14
7210
Golang Gin框架HTTP上传文件
Golang之http编程
Go原生支持http。import("net/http") Go的http服务性能和nginx比较接近 几行代码就可以实现一个web服务 服务端http package main import ( "fmt" "net/http" ) func Hello(w http.ResponseWriter, r *http.Request) { fmt.Println("handle hello") fmt.Fprintf(w, "hello") } func Login(w
超蛋lhy
2018/08/31
4580
Go 语言 Web 编程系列(十四)—— 获取用户请求数据(下)
默认情况下,POST 表单编码类型属性 enctype 值是 application/x-www-form-urlencoded,其含义是将表单请求数据编码为 URL 参数,该属性用于指定提交表单时生成请求的请求头 Content-Type 的值。
学院君
2020/05/27
9430
Go语言HTTP服务实现GET和POST请求的同时支持
在现代的Web开发中,HTTP服务是构建网络应用程序的基础。而支持GET和POST请求是其中最基本、最常见的功能之一。GET请求用于从服务器获取数据,而POST请求则用于向服务器提交数据。在Go语言中,通过标准库中的net/http包,我们可以轻松创建和管理HTTP服务,并且很容易支持GET和POST请求。
繁依Fanyi
2024/04/02
4330
相关推荐
精通Go语言文件上传:深入探讨r.FormFile函数的应用与优化
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文