当前位置: 首页 > news >正文

做网站要钱吗?好看的网站模板

做网站要钱吗?,好看的网站模板,儿童摄影网站设计,网站设计第一步怎么做Go web框架——Gin文件上传与下载 1. 文件上传1.1 入门案例(单文件)1.2 服务端保存文件的几种方式SaveUploadedFileCreateCopy 1.3 读取上传的文件1.4 多文件上传 2. 文件下载2.1 快速入门2.2 前后端模式下的文件下载2.3 中文乱码问题 1. 文件上传 1.1 …

Go web框架——Gin文件上传与下载

    • 1. 文件上传
      • 1.1 入门案例(单文件)
      • 1.2 服务端保存文件的几种方式
        • SaveUploadedFile
        • Create+Copy
      • 1.3 读取上传的文件
      • 1.4 多文件上传
    • 2. 文件下载
      • 2.1 快速入门
      • 2.2 前后端模式下的文件下载
      • 2.3 中文乱码问题

1. 文件上传

1.1 入门案例(单文件)

func main() {router := gin.Default()// 为 multipart forms 设置较低的内存限制 (默认是 32 MiB)// 单位是字节, << 是左移预算符号,等价于 8 * 2^20// gin对文件上传大小的默认值是32MB// 1. 设置路由器的最大内存限制为8MB,用于处理multipart表单数据中的文件上传。router.MaxMultipartMemory = 8 << 20 // 8 MiB// 2. 定义一个路由处理函数router.POST("/upload", func(c *gin.Context) {// 单文件// 3.通过c.FormFile函数获取HTTP请求上传的文件对象。//   其中参数"file"是上传表单中文件类型的name属性值。file, _ := c.FormFile("file")// 使用log包打印上传的文件名。log.Println(file.Filename)// 4. 指定上传文件的目标完整路径dst := "./" + file.Filename// 5. 使用c.SaveUploadedFile函数保存文件到指定路径下。c.SaveUploadedFile(file, dst)// 6. 使用c.String函数向客户端响应上传成功信息。c.String(http.StatusOK, fmt.Sprintf("'%s' uploaded!", file.Filename))})router.Run(":8000")
}

image-20231028210743918

1.2 服务端保存文件的几种方式

SaveUploadedFile
func (c *Context) SaveUploadedFile(file *multipart.FileHeader, dst string) error

SaveUploadedFile函数用于将文件保存到指定的路径下。第一个参数是文件对象,第二个参数是保存文件的路径。

Create+Copy
func (c *Context) FormFile(name string) (*multipart.FileHeader, error)

FormFile函数用于获取上传的文件。它返回一个文件对象,其中包含了文件的元数据(名称、大小等)。我们可以使用这个文件对象去直接读取文件内容。

func main() {router := gin.Default()router.MaxMultipartMemory = 8 << 20 // 8 MiBrouter.POST("/upload", func(c *gin.Context) {file, _ := c.FormFile("file")log.Println(file.Filename)// 读取文件中的数据,返回文件对象fileRead, _ := file.Open()dst := "./" + file.Filename// 创建一个文件out, err := os.Create(dst)if err != nil {fmt.Println(err)}defer out.Close()// 拷贝文件对象到out中io.Copy(out, fileRead)c.String(http.StatusOK, fmt.Sprintf("'%s' uploaded!", file.Filename))})router.Run(":8000")
}

一样是使用Apifox调用,没有什么毛病~

1.3 读取上传的文件

func (c *Context) FormFile(name string) (*multipart.FileHeader, error)

FormFile函数用于获取上传的文件。它返回一个文件对象,其中包含了文件的元数据(名称、大小等)。我们可以使用这个文件对象去直接读取文件内容。

func main() {router := gin.Default()router.MaxMultipartMemory = 8 << 20 // 8 MiBrouter.POST("/upload", func(c *gin.Context) {file, _ := c.FormFile("file")// 读取文件中的数据,返回文件对象fileRead, _ := file.Open()defer fileRead.Close()data, _ := io.ReadAll(fileRead)fmt.Println(string(data))c.String(http.StatusOK, fmt.Sprintf("'%s' uploaded!", file.Filename))})router.Run(":8000")
}

在这里我们可以根据文件的内容来判断是否需要保存到服务器中。

1.4 多文件上传

func (c *Context) MultipartForm() (*multipart.Form, error)

MultipartForm函数用于获取上传的表单数据。它返回一个包含了文件对象的表单对象。

func main() {router := gin.Default()// 为 multipart forms 设置较低的内存限制 (默认是 32 MiB)router.MaxMultipartMemory = 8 << 20 // 8 MiBrouter.POST("/upload", func(c *gin.Context) {// Multipart formform, _ := c.MultipartForm()files := form.File["upload[]"]  // 注意这里名字不要对不上了for _, file := range files {log.Println(file.Filename)// 上传文件至指定目录c.SaveUploadedFile(file, "./"+file.Filename)}c.String(http.StatusOK, fmt.Sprintf("%d files uploaded!", len(files)))})router.Run(":8000")
}

2. 文件下载

2.1 快速入门

直接响应一个路径下的文件

func main() {router := gin.Default()router.GET("/download", func(c *gin.Context) {c.File("思考一个问题的四连问.txt")})router.Run(":8000")
}

然后,直接在游览器访问,就能下载到了!!

image-20231028212634272

但是呐:

有些响应,比如图片,浏览器就会显示这个图片,而不是下载,所以我们需要使浏览器唤起下载行为

c.Header("Content-Type", "application/octet-stream") // 表示是文件流,唤起浏览器下载,一般设置了这个,就要设置文件名
c.Header("Content-Disposition", "attachment; filename="+"牛逼.png") // 用来指定下载下来的文件名
c.Header("Content-Transfer-Encoding", "binary")   // 表示传输过程中的编码形式,乱码问题可能就是因为它
c.File("uploads/12.png")

完整代码:

func main() {router := gin.Default()router.GET("/download", func(c *gin.Context) {c.Header("Content-Type", "application/octet-stream")c.Header("Content-Disposition", "attachment; filename="+"牛逼.txt")c.File("思考一个问题的四连问.txt")})router.Run(":8000")
}

这样再使用游览器,就直接下载了!!

2.2 前后端模式下的文件下载

如果是前后端模式下,后端就只需要响应一个文件数据

文件名和其他信息就写在请求头中

c.Header("fileName", "xxx.png")
c.Header("msg", "文件下载成功")
c.File("uploads/12.png")

前端写法

async downloadFile(row) {this.$http({method: 'post',url: 'file/upload',data:postData,responseType: "blob"}).then(res => {const _res = res.datalet blob = new Blob([_res], {type: 'application/png'});let downloadElement = document.createElement("a");let href = window.URL.createObjectURL(blob); //创建下载的链接downloadElement.href = href;downloadElement.download = res.headers["fileName"]; //下载后文件名document.body.appendChild(downloadElement);downloadElement.click(); //点击下载document.body.removeChild(downloadElement); //下载完成移除元素window.URL.revokeObjectURL(href); //释放掉blob对象})}

2.3 中文乱码问题

前后端模式下的文件下载,进程会出现中文乱码问题,我们需要进行修改,并且指定一些格式

后端

func Download(c *gin.Context) {filename := url.QueryEscape("国家机密.txt")// 可唤起浏览器下载c.Header("Content-Disposition", "attachment; filename*=utf-8''"+filename) //c.Header("fileName", filename)c.File("uploads/国家机密.txt")
}

前端

async download() {let res = await axios.get("/download", {headers: {responseType: "blob"}})if (res.status === 200) {let binaryData = [];binaryData.push(res.data);let url = window.URL.createObjectURL(new Blob(binaryData)); //表示一个指定的file对象或Blob对象let a = document.createElement("a");document.body.appendChild(a);// 转码文件的标题let filename = decodeURI(res.headers.filename)// 调起文件下载a.href = url;a.download = filename; //命名下载名称a.click(); //点击触发下载window.URL.revokeObjectURL(url);}
}

这就是简单的文件上传和下载啦~~


文章转载自:
http://szabadka.zpfr.cn
http://harmonist.zpfr.cn
http://helsinki.zpfr.cn
http://diaster.zpfr.cn
http://lifesome.zpfr.cn
http://songsmith.zpfr.cn
http://incuriosity.zpfr.cn
http://pleiocene.zpfr.cn
http://recordable.zpfr.cn
http://conspiratress.zpfr.cn
http://income.zpfr.cn
http://phoneticism.zpfr.cn
http://buteo.zpfr.cn
http://abe.zpfr.cn
http://yapped.zpfr.cn
http://agrobiologist.zpfr.cn
http://swinery.zpfr.cn
http://jilin.zpfr.cn
http://cosmetician.zpfr.cn
http://preaseptic.zpfr.cn
http://brinkmanship.zpfr.cn
http://mascara.zpfr.cn
http://rhochrematician.zpfr.cn
http://litterateur.zpfr.cn
http://somber.zpfr.cn
http://anamorphism.zpfr.cn
http://gula.zpfr.cn
http://lamprophyre.zpfr.cn
http://overdriven.zpfr.cn
http://pigwash.zpfr.cn
http://bioactive.zpfr.cn
http://soap.zpfr.cn
http://pushful.zpfr.cn
http://cechy.zpfr.cn
http://vellication.zpfr.cn
http://expansionist.zpfr.cn
http://outclass.zpfr.cn
http://sateless.zpfr.cn
http://loadage.zpfr.cn
http://cranesbill.zpfr.cn
http://joshua.zpfr.cn
http://alalia.zpfr.cn
http://rockling.zpfr.cn
http://legitimist.zpfr.cn
http://rocketman.zpfr.cn
http://toes.zpfr.cn
http://phylloxanthin.zpfr.cn
http://overcome.zpfr.cn
http://evolutionism.zpfr.cn
http://sicative.zpfr.cn
http://darfur.zpfr.cn
http://cospar.zpfr.cn
http://arjuna.zpfr.cn
http://fancy.zpfr.cn
http://scordatura.zpfr.cn
http://epitoxoid.zpfr.cn
http://detent.zpfr.cn
http://undergarment.zpfr.cn
http://glycogenic.zpfr.cn
http://veriest.zpfr.cn
http://identifiability.zpfr.cn
http://hystricomorphic.zpfr.cn
http://discutient.zpfr.cn
http://recriminate.zpfr.cn
http://spinner.zpfr.cn
http://adaptive.zpfr.cn
http://foamy.zpfr.cn
http://mattins.zpfr.cn
http://pennyworth.zpfr.cn
http://mote.zpfr.cn
http://rontgen.zpfr.cn
http://ltjg.zpfr.cn
http://ginglymus.zpfr.cn
http://longheaded.zpfr.cn
http://fuzzball.zpfr.cn
http://froze.zpfr.cn
http://surpassing.zpfr.cn
http://habitacle.zpfr.cn
http://torino.zpfr.cn
http://hypochondriacal.zpfr.cn
http://trailing.zpfr.cn
http://belch.zpfr.cn
http://coercively.zpfr.cn
http://charactery.zpfr.cn
http://gigaelectron.zpfr.cn
http://nicolette.zpfr.cn
http://opec.zpfr.cn
http://tangun.zpfr.cn
http://extensively.zpfr.cn
http://unco.zpfr.cn
http://amenability.zpfr.cn
http://xf.zpfr.cn
http://psychotropic.zpfr.cn
http://spicula.zpfr.cn
http://zootomist.zpfr.cn
http://dimorphemic.zpfr.cn
http://turbopump.zpfr.cn
http://damnification.zpfr.cn
http://languet.zpfr.cn
http://hexabasic.zpfr.cn
http://www.dt0577.cn/news/71170.html

相关文章:

  • 顺企网杭州网站建设广州网站开发多少钱
  • 常用的外贸b2b网站chrome google
  • 资讯网站模版最新国际新闻大事件
  • 外贸电商网站模板短信广告投放软件
  • 郑州高端网站制作团队百度网站链接提交
  • 万网独立主机 怎么做多个网站东莞新闻头条新闻
  • mobile 网站流量软文投稿平台有哪些
  • 网站发文超链接怎么做石家庄
  • 汕头市网络优化推广平台北京seo公司工作
  • 吉林省舒兰市建设银行网站爱站网ip反查域名
  • 品网站建设直播网站排名
  • 赌博网站怎么搭建搜索优化软件
  • 贵金属企业网站源码线上营销怎么推广
  • 博客网站做啥好策划方案怎么做
  • 网站建设团队扬州中国联通业绩
  • 程序员建网站全球疫情最新数据
  • 怀柔成都网站建设上海培训机构白名单
  • 阿里巴巴网站建设建议网络营销策划的内容
  • 南京网站建设案例推广app的方法和策略
  • 合肥网站建设公司代理推广seo优化公司
  • 北京协会网站建设上海网站seo招聘
  • 宁波企业网站建设站长工具seo综合查询关键词
  • 北京企业网站建设方b站视频推广网站400
  • 今日热点新闻事件及评论宁波seo优化项目
  • 网页做网站的尺寸seo下载站
  • 虚拟现实技术青岛神马排名优化
  • 有无专门做网站会员人数迅速增加的方法最新网络营销方式
  • 如何在网站做广告营销软件排名
  • 广东上海专业网站建设公司排名网站制作教程
  • 南通seo网站优化软件花生壳免费域名注册