一.文件下载简介

  • 文件下载总体步骤
    • 客户端向服务端发起请求,请求参数包含要下载文件的名称
    • 服务器接收到客户端请求后把文件设置到响应对象中,响应给客户端浏览器
  • 载时需要设置的响应头信息
    • Content-Type: 内容MIME类型
      • application/octet-stream 任意类型
    • Content-Disposition:客户端对内容的操作方式
      • inline 默认值,表示浏览器能解析就解析,不能解析下载
      • attachment;filename=下载时显示的文件名 ,客户端浏览器恒下载

二.代码

  • 在view/index.html中

    1. <!DOCTYPE html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <title>Title</title>
    6. </head>
    7. <body>
    8. <a href="download?filename=abc.png">下载</a>
    9. </body>
    10. </html>
  • 在main.go中编写 ```go package main

import ( “net/http” “html/template” “io/ioutil” )

func showDownloadPage(rw http.ResponseWriter,r http.Request){ t,_:=template.ParseFiles(“template/html/download.html”) t.Execute(rw,nil) } func download(rw http.ResponseWriter,r http.Request){ //获取请求参数 fn:=r.FormValue(“filename”) //设置响应头 header:=rw.Header() header.Add(“Content-Type”,”application/octet-stream”) header.Add(“Content-Disposition”,”attachment;filename=”+fn) //使用ioutil包读取文件 b,_:=ioutil.ReadFile(“D:/“+fn) //写入到响应流中 rw.Write(b) }

func main() { server:=http.Server{Addr:”localhost:8899”}

http.HandleFunc(“/showdownload”,showDownloadPage) http.HandleFunc(“/download”,download)

server.ListenAndServe() } ```