跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 强大的 v 友们,问个问题:怎样从第三方获取文件分片传递给前端 golang
未分類
23 3 月 2020

强大的 v 友们,问个问题:怎样从第三方获取文件分片传递给前端 golang

强大的 v 友们,问个问题:怎样从第三方获取文件分片传递给前端 golang

資深大佬 : airplayxcom 66

分片获取容易实现,怎么分片给前端呢?
实现静态服务器的方式前提是后端形成了这个整体文件反给前端。我想做的是一边从源端获取一边反给前端。
大佬有話說 (10)

  • 資深大佬 : BlackBerry999

    协程+channel ? 或者 socket ?

  • 資深大佬 : Leigg

    为何不让前端直接调用三方接口,减少故障点,是有什么经过后台的必要性?如果有,最好先缓存后台,缓存完成后再传前端,这样成功率更大些,大文件更甚。

  • 主 資深大佬 : airplayxcom

    @Leigg 是的 必须走后端授权,缓存大文件不吃内存吗,几个人同时下载发文件怎么办。

  • 資深大佬 : puyo

    先 head 拿到 contentLength,返回头信息,然后并发去第三方下载,按顺序 flush。

  • 資深大佬 : Leigg

    @airplayxcom 缓存并不一定就是存内存。后台整一段磁盘空间用来缓存下载文件,只做临时缓存,下完就删,或者保留一段时间。

  • 資深大佬 : index90

    http.HandleFunc(“”, func(writer http.ResponseWriter, request *http.Request) {
    file, err := os.Open(“”)
    if err != nil {
    writer.WriteHeader(404)
    return
    }
    defer file.Close()
    if _, err := io.Copy(writer, file); err != nil {
    writer.WriteHeader(500)
    return
    }
    writer.Header().Set(“content-type”, “text/plain”)
    writer.WriteHeader(200)
    })

  • 資深大佬 : index90

    如果你不是读取本地文件,而是从别人的请求中转发数据,你留意一下 http.Response 的 body 是已经实现了 reader interface,只需要从 reader copy 数据到 writer 就可以了。

    面向接口编程,你需要什么接口,去找对应的实现就可以了。

  • 資深大佬 : index90

    #6 的代码不对,send header 应该在 send body 之前。
    http.HandleFunc(“”, func(writer http.ResponseWriter, request *http.Request) {
    var reader io.Reader
    //{
    // file, err := os.Open(“”)
    // if err != nil {
    // writer.WriteHeader( http.StatusNotFound)
    // return
    // }
    // reader = file
    // defer file.Close()
    //}
    {
    resp, err := http.Client{}.Get(“”)
    if err != nil {
    writer.WriteHeader( http.StatusNotFound)
    return
    }
    reader = resp.Body
    }
    writer.Header().Set(“content-type”, “text/plain”)
    _, _ = io.Copy(writer, reader)
    return
    })

  • 主 資深大佬 : airplayxcom

    @index90 有心了

  • 資深大佬 : ihciah

    不一定非要先全拼出来,可以流式处理,具体实现可以按照上的直接用 Reader 接口。自己实现 Reader 接口的话,在 read 的时候现场拼接下一块返回就行了。

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具