1. package api

  1. import (
  1.     "net/http"
  1.     "fmt"
  1.     "io/ioutil"
  1. )

  1. const bufferSize = 512 * 1024
  1. //获取空间文件
  1. func Get(host string, port int, vid uint64, fid uint64, filename string) ([]byte, error) {
  1.     url := fmt.Sprintf("http://%s:%d/%d/%d/%s", host, port, vid, fid, filename)
  1.     resp, err := http.Get(url)
  1.     if err != nil {
  1.         return nil, err
  1.     }
  1.     defer resp.Body.Close()

  1.     if resp.StatusCode == http.StatusOK {
  1.         return ioutil.ReadAll(resp.Body)
  1.     }else {
  1.         return nil, fmt.Errorf("%d != 200", resp.StatusCode)
  1.     }
  1. }
  1. //获取空间文件 指定字节区间
  1. func GetRange(host string, port int, vid uint64, fid uint64, filename string, start int, length int) ([]byte, error) {
  1.     url := fmt.Sprintf("http://%s:%d/%d/%d/%s", host, port, vid, fid, filename)
  1.     req, _ := http.NewRequest(http.MethodGet, url, nil)
  1.     req.Header.Set("Range", fmt.Sprintf("bytes=%d-%d", start, start + length - 1))
  1.     resp, err := http.DefaultClient.Do(req)
  1.     if err != nil {
  1.         return nil, err
  1.     }
  1.     defer resp.Body.Close()

  1.     if resp.StatusCode == http.StatusPartialContent {
  1.         return ioutil.ReadAll(resp.Body)
  1.     }else {
  1.         return nil, fmt.Errorf("%d != 200", resp.StatusCode)
  1.     }
  1. }

随机推荐

  1. LeetCode(32)-Binary Tree Level Order Traversal

    题目: LeetCode Premium Subscription Problems Pick One Mock Articles Discuss Book fengsehng 102. Binary ...

  2. jsp标签jsp:setProperty用法

    <jsp:setProperty>用来设置已经实例化的Bean对象的属性 第一种形式: <jps:setProperty name = "JavaBean实例名" ...

  3. 关于iOS9 HTTP不能正常使用的解决方法

    在工程的info.plist文件中添加NSAPPTransportSecurity类型为Dictionary,在NSAPPTransportSecurity下添加NSAllowsArbitraryLo ...

  4. ORACLE 本地数据库存储过程 调用远程数据库存储过程

    废话少说,直接切入主题  步骤1:建立一个远程数据库的连接服务名  D:\oracle\ora92\network\admin\tnsnames.ora 添加如下代码:  SDEC =   (DESC ...

  5. WSGI及gunicorn指北(二)

    pyg0已经大概了解了wsgi.现在他决定深入探索他们实际在生产环境里用到的web 服务器 -gunicorn. 先来看看官网的介绍:Gunicorn 是一个运行在Unix上的python WSGI ...

  6. 在MinGW下编译ffmpeg

    因为需要使用ffmpeg的相关库和执行文件,所以需要编译最新的ffmpeg代码.为了能在编译成Windows native执行程序(需要在.net中调用该执行程序),这里我们使用MinGW. 1,安装 ...

  7. 【转】UNREFERENCED_PARAMETER的作用

    UNREFERENCED_PARAMETER 的作用我们从 UNREFERENCED_PARAMETER 开始吧.这个宏在 winnt.h 中定义如下: #define UNREFERENCED_PA ...

  8. PHP合并数组的三种方法的分析与比较

    常用的合并数组的方法有三种:array_merge().array_merge_recursive().+,下面一个一个介绍 array_merge() 此函数合并一个或多个数组,当输入的数组中有相同 ...

  9. C语言中函数中传入一个数组,并且返回一个数组

    一.C语言可以很容易将一个数组传递给一个自定义函数,格式如下: main() { adb(float a[],int n); } float adb(float a[],int n) { …… ret ...

  10. SOFA 源码分析— 事件总线

    前言 大部分框架都是事件订阅功能,即观察者模式,或者叫事件机制.通过订阅某个事件,当触发事件时,回调某个方法.该功能非常的好用,而 SOFA 内部也设计了这个功能,并且内部大量使用了该功能.来看看是如 ...