code: func (d *driver) Reader(context context.Context, path string, offset int64) (io.ReadCloser, error) {
  	res, err := getObject(d.client, d.bucket, d.pathToKey(path), offset)
  	if err != nil {
  		if res != nil {
  			if res.StatusCode == http.StatusNotFound {
  				res.Body.Close()
  				return nil, storagedriver.PathNotFoundError{Path: path}
  			}
  
  			if res.StatusCode == http.StatusRequestedRangeNotSatisfiable {
  				res.Body.Close()
  				obj, err := storageStatObject(d.context(context), d.bucket, d.pathToKey(path))
  				if err != nil {
  					return nil, err
  				}
  				if offset == int64(obj.Size) {
  					return ioutil.NopCloser(bytes.NewReader([]byte{})), nil
  				}
  				return nil, storagedriver.InvalidOffsetError{Path: path, Offset: offset}
  			}
  		}
  		return nil, err
  	}
  	if res.Header.Get("Content-Type") == uploadSessionContentType {
  		defer res.Body.Close()
  		return nil, storagedriver.PathNotFoundError{Path: path}
  	}
  	return res.Body, nil
  }
docs: // Reader retrieves an io.ReadCloser for the content stored at "path"
  // with a given byte offset.
  // May be used to resume reading a stream by providing a nonzero offset.