提交 7915d260 作者: Łukasz Magiera

coreapi unixfs: fix Get seeking in gateway

License: MIT
Signed-off-by: 's avatarŁukasz Magiera <magik6k@gmail.com>
上级 34b1313d
...@@ -147,6 +147,10 @@ func cat(ctx context.Context, api iface.CoreAPI, paths []string, offset int64, m ...@@ -147,6 +147,10 @@ func cat(ctx context.Context, api iface.CoreAPI, paths []string, offset int64, m
return nil, 0, err return nil, 0, err
} }
if f.IsDirectory() {
return nil, 0, iface.ErrIsDir
}
file := f.(catFile) file := f.(catFile)
fsize, err := file.Size() fsize, err := file.Size()
......
...@@ -179,11 +179,13 @@ func (i *gatewayHandler) getOrHeadHandler(ctx context.Context, w http.ResponseWr ...@@ -179,11 +179,13 @@ func (i *gatewayHandler) getOrHeadHandler(ctx context.Context, w http.ResponseWr
} }
dr, err := i.api.Unixfs().Get(ctx, resolvedPath) dr, err := i.api.Unixfs().Get(ctx, resolvedPath)
dir := dr.IsDirectory() dir := false
switch err { switch {
case nil: case err == nil:
// Cat() worked dir = dr.IsDirectory()
if !dir {
defer dr.Close() defer dr.Close()
}
default: default:
webError(w, "ipfs cat "+escapedURLPath, err, http.StatusNotFound) webError(w, "ipfs cat "+escapedURLPath, err, http.StatusNotFound)
return return
...@@ -370,7 +372,7 @@ func (i *gatewayHandler) getOrHeadHandler(ctx context.Context, w http.ResponseWr ...@@ -370,7 +372,7 @@ func (i *gatewayHandler) getOrHeadHandler(ctx context.Context, w http.ResponseWr
} }
type sizeReadSeeker interface { type sizeReadSeeker interface {
Size() uint64 Size() (int64, error)
io.ReadSeeker io.ReadSeeker
} }
...@@ -381,7 +383,7 @@ type sizeSeeker struct { ...@@ -381,7 +383,7 @@ type sizeSeeker struct {
func (s *sizeSeeker) Seek(offset int64, whence int) (int64, error) { func (s *sizeSeeker) Seek(offset int64, whence int) (int64, error) {
if whence == io.SeekEnd && offset == 0 { if whence == io.SeekEnd && offset == 0 {
return int64(s.Size()), nil return s.Size()
} }
return s.sizeReadSeeker.Seek(offset, whence) return s.sizeReadSeeker.Seek(offset, whence)
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论