goweb中文件上传和文件下载

ops/2025/3/18 2:46:50/

文件上传

  • 文件上传:客户端把上传文件转换为二进制流后发送给服务器,服务器对二进制流进行解析
  • HTML表单(form)enctype(Encode Type)属性控制表单在提交数据到服务器时数据的编码类型
    • enctype=“application/x-www-form-urlencoded” 默认值,表单数据会被编码为名称/值形式。
    • oenctype="multipart/form-data”编码成消息,每个控件对应消息的一部分.请求方式必须是post
    • oenctype=“text/plain"纯文本形式进行编码的

服务端可以使用FormFile(“name”)获取到上传的文件

main.go

package mainimport ("html/template""io/ioutil""net/http""strings"
)func welcome(w http.ResponseWriter, r *http.Request) {t, _ := template.ParseFiles("demo/view/index.html")t.Execute(w, nil)
}func upload(w http.ResponseWriter, r *http.Request) {fileName := r.FormValue("name")//获取到文件,文件名file, fileHeader, _ := r.FormFile("file")b, _ := ioutil.ReadAll(file)//获取文件名扩展名s := fileHeader.Filename[strings.LastIndex(fileHeader.Filename, "."):]//文件名,[]byte,模式ioutil.WriteFile("D:/"+fileName+s, b, 0777)t, _ := template.ParseFiles("demo/view/success.html")t.Execute(w, nil)
}func main() {server := http.Server{Addr: ":8090"}http.HandleFunc("/", welcome)http.HandleFunc("/upload", upload)server.ListenAndServe()
}

index.html

<!doctype html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>文件上传</title>
</head>
<body>
<form action="upload" method="post" enctype="multipart/form-data">文件名:<input type="text" name="name"/><br/>文件:<input type="file" name="file"/><br/><input type="submit" value="提交"/>
</form>
</body>
</html>

文件下载

文件下载总体步骤

  • 客户端向服务端发起请求,请求参数包含要下载文件的名称
  • 服务器接收到客户端请求后把文件设置到响应对象中,响应给客户端浏览器

下载时需要设置的响应头信息

  • content-Type:内容MIME类型

    application/octet-stream 任意类型

  • Content-Disposition:客户端对内容的操作方式

    inline 默认值,表示浏览器能解析就解析,不能解析下载

    attachment;filename=下载时显示的文件名,客户端浏览器恒下载

mian.go

package mainimport ("fmt""html/template""io/ioutil""net/http""strings"
)func welcome(w http.ResponseWriter, r *http.Request) {t, _ := template.ParseFiles("demo/view/index.html")t.Execute(w, nil)
}func download(w http.ResponseWriter, r *http.Request) {filename := r.FormValue("fileName")f, err := ioutil.ReadFile("D:/gofile/" + filename)if err != nil {fmt.Fprintln(w, "文件下载失败", err)return}//设置响应头h := w.Header()h.Set("Content-Type", "application/octet-stream")h.Set("Content-Disposition", "attachment;filename="+filename)w.Write(f)}func main() {server := http.Server{Addr: ":8090"}http.HandleFunc("/", welcome)http.HandleFunc("/download", download)server.ListenAndServe()
}

index.html

<!doctype html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>文件下载</title>
</head>
<body>
<a href="download?fileName=abc.png">下载</a>
</body>
</html>


http://www.ppmy.cn/ops/166662.html

相关文章

单机DeepSeek做PPT,YYDS!

今天同事问我 AI 能不能做 PPT&#xff0c;有个述职报告要做&#xff0c;问我能不能帮忙&#xff0c;这时我脑海中的第一画面就是 DeepSeek Kimi DeepSeek 擅长逻辑构建与内容生成&#xff0c;其深度思考能力当前测试下来&#xff0c;不愧为国内No.1&#xff0c;而且还会把中间…

本地部署Deep Seek-R1,搭建个人知识库——笔记

目录 一、本地部署 DeepSeek - R1 1&#xff1a;安装Ollama 2&#xff1a;部署DeepSeek - R1模型 3&#xff1a;安装Cherry Studio 二、构建私有知识库 一、本地部署 DeepSeek - R1 1&#xff1a;安装Ollama 1.打开Ollama下载安装 未科学上网&#xff0c;I 先打开迅雷再下…

计算机网络笔记再战——理解几个经典的协议HTTP章3

理解几个经典协议——HTTP章3 返回结果的HTTP状态码 ​ 我们知道&#xff0c;ICMP可以传递IP通信时候的状态如何。HTTP虽然没有辅助的解析&#xff0c;但是它可以使用状态码来表达我们的HTTP请求的结果&#xff0c;标记服务器端的处理是否正常、通知出现的错误等工作。这就是…

微信小程序从右向左无限滚动组件封装(类似公告)

组件代码 wxml代码 <view class"container"><view class"text-wrapper"><!-- 这两个都不能删除,用来放无限滚动的,第一个滚完第二个接上,第二个滚完第一个又接上了 --><text class"scroll-text text1" style"left: …

Spring Boot 核心知识点:依赖注入 (Dependency Injection)

Spring Boot 核心知识点&#xff1a;依赖注入 (Dependency Injection) 一、引言 在软件开发中&#xff0c;对象之间的依赖关系是不可避免的。一个对象通常需要与其他对象协作才能完成其功能。传统的对象创建方式往往需要在对象内部显式地创建或查找其依赖的对象&#xff0c;这…

R 语言科研绘图 --- 密度图-汇总

在发表科研论文的过程中&#xff0c;科研绘图是必不可少的&#xff0c;一张好看的图形会是文章很大的加分项。 为了便于使用&#xff0c;本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中&#xff0c;获取方式&#xff1a; R 语言科研绘图模板 --- sciRplothttps://mp.…

2025 香港 Web3 嘉年华:全球 Web3 生态的年度盛会

自 2023 年首届香港 Web3 嘉年华成功举办以来&#xff0c;这一盛会已成为全球 Web3 领域规模最大、影响力最深远的行业活动之一。2025 年 4 月 6 日至 9 日&#xff0c;第三届香港 Web3 嘉年华将在香港盛大举行。本届活动由万向区块链实验室与 HashKey Group 联合主办、W3ME 承…

数学建模 第二节

目录 前言 一 解题技巧 二 非线性规划问题 三 钻井布局问题 总结 前言 继续学习数学建模 一 解题技巧 题目分析 1 每次写题目时候&#xff0c;都要把题目进行可视化------很有必就是把题目转化为图谱 2 对应的约束条件是要用文字进行说明 3 优化后的模型是要满足…