美文网首页
Go尝试解决前端下载服务器静态文件问题

Go尝试解决前端下载服务器静态文件问题

作者: 东京的雨不会淋湿首尔 | 来源:发表于2019-11-25 20:42 被阅读0次

    使用<a>标签的download属性

    <a>标签的 dowanload 属性只有在同源情况下在能用,且目前只支持 火狐浏览器和谷歌浏览器
    在<a>标签中必须设置 href 属性。
    download 属性规定被下载的超链接目标。
    该属性也可以设置一个值来规定下载文件的名称。所允许的值没有限制,浏览器将自动检测正确的文件扩展名并添加到文件 (.img, .pdf, .txt, .html, 等等)。

    // 请将href中的地址改为文件地址,下载下来的文件名称为 ceshi
    <a href="www.baidu.com" download="ceshi">
    
    

    ??

    一个 HTTP 请求头解决问题 Content-Disposition: attachment; filename="filename"

    Iris框架的 ctx.SendFile()方法

    iris框架中有封装方法 ctx.SendFile()方法可以将文件的内容返还给前端。(ps:如果文件特别大的话,内容很多感觉还是不方便)

    SendFile(filename string, destinationName string) error
    
    

    两个参数,filename是目标文件路径,destinationName 是赋予文件名

    /* 文件目录为
    — files
       —— first.xml
    —— main.go
    */
    package main
    
    import (
        "github.com/kataras/iris"
    )
    
    func main() {
        app := iris.New()
        app.Get("/", func(ctx iris.Context) {
            file := "./files/first.xml"
            ctx.SendFile(file, "c.xml")
        })
        app.Run(iris.Addr(":8080"))
    }
    
    

    压缩指定文件

    可以将浏览器无法下载的文件压缩为.zip格式文件,然后将该.zip文件返还给浏览器,浏览器再进行下载。

    /* 压缩文件为zip格式
    * filePath 为需要压缩的文件路径,zipPath为压缩后文件路径
    */
    func FileToZip(filePath string,zipPath string) error {
        f,err := os.Open(filePath)
        if err !=nil{
            return err
        }
        defer f.Close()
    
        z,err := os.Create(zipPath)
        if err !=nil{
            return err
        }
        defer z.Close()
    
        wr := zip.NewWriter(z)
        // 因为filePath是一个路径,所以会创建路径中的所有文件夹
        w,err := wr.Create(filePath)
        if err != nil{
            return err
        }
        _,err = io.Copy(w,f)
        if err != nil{
            return err
        }
        return nil
    }
    
    

    作者:Tony乙
    链接:https://juejin.im/post/5dba6af8518825645b1d101b
    来源:掘金
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    相关文章

      网友评论

          本文标题:Go尝试解决前端下载服务器静态文件问题

          本文链接:https://www.haomeiwen.com/subject/iatswctx.html