Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
G
go-ipfs
概览
概览
详情
活动
周期分析
版本库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
jihao
go-ipfs
Commits
d338a81e
提交
d338a81e
authored
1月 26, 2015
作者:
Matt Bell
提交者:
Juan Batiz-Benet
1月 28, 2015
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
core/corehttp: Support Range requests in gateway handler
上级
81bb548d
隐藏空白字符变更
内嵌
并排
正在显示
1 个修改的文件
包含
16 行增加
和
22 行删除
+16
-22
gateway_handler.go
core/corehttp/gateway_handler.go
+16
-22
没有找到文件。
core/corehttp/gateway_handler.go
浏览文件 @
d338a81e
...
...
@@ -3,9 +3,9 @@ package corehttp
import
(
"html/template"
"io"
"mime"
"net/http"
"strings"
"path"
"time"
"github.com/jbenet/go-ipfs/Godeps/_workspace/src/code.google.com/p/go.net/context"
mh
"github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-multihash"
...
...
@@ -23,7 +23,7 @@ type gateway interface {
ResolvePath
(
string
)
(
*
dag
.
Node
,
error
)
NewDagFromReader
(
io
.
Reader
)
(
*
dag
.
Node
,
error
)
AddNodeToDAG
(
nd
*
dag
.
Node
)
(
u
.
Key
,
error
)
NewDagReader
(
nd
*
dag
.
Node
)
(
io
.
Reader
,
error
)
NewDagReader
(
nd
*
dag
.
Node
)
(
io
.
Read
Seek
er
,
error
)
}
// shortcut for templating
...
...
@@ -63,8 +63,8 @@ func (i *gatewayHandler) loadTemplate() error {
return
nil
}
func
(
i
*
gatewayHandler
)
ResolvePath
(
p
ath
string
)
(
*
dag
.
Node
,
error
)
{
return
i
.
node
.
Resolver
.
ResolvePath
(
p
ath
)
func
(
i
*
gatewayHandler
)
ResolvePath
(
p
string
)
(
*
dag
.
Node
,
error
)
{
return
i
.
node
.
Resolver
.
ResolvePath
(
p
)
}
func
(
i
*
gatewayHandler
)
NewDagFromReader
(
r
io
.
Reader
)
(
*
dag
.
Node
,
error
)
{
...
...
@@ -76,14 +76,14 @@ func (i *gatewayHandler) AddNodeToDAG(nd *dag.Node) (u.Key, error) {
return
i
.
node
.
DAG
.
Add
(
nd
)
}
func
(
i
*
gatewayHandler
)
NewDagReader
(
nd
*
dag
.
Node
)
(
io
.
Reader
,
error
)
{
func
(
i
*
gatewayHandler
)
NewDagReader
(
nd
*
dag
.
Node
)
(
io
.
Read
Seek
er
,
error
)
{
return
uio
.
NewDagReader
(
i
.
node
.
Context
(),
nd
,
i
.
node
.
DAG
)
}
func
(
i
*
gatewayHandler
)
ServeHTTP
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
p
ath
:=
r
.
URL
.
Path
[
5
:
]
urlP
ath
:=
r
.
URL
.
Path
[
5
:
]
nd
,
err
:=
i
.
ResolvePath
(
p
ath
)
nd
,
err
:=
i
.
ResolvePath
(
urlP
ath
)
if
err
!=
nil
{
if
err
==
routing
.
ErrNotFound
{
w
.
WriteHeader
(
http
.
StatusNotFound
)
...
...
@@ -98,18 +98,12 @@ func (i *gatewayHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
return
}
extensionIndex
:=
strings
.
LastIndex
(
path
,
"."
)
if
extensionIndex
!=
-
1
{
extension
:=
path
[
extensionIndex
:
]
mimeType
:=
mime
.
TypeByExtension
(
extension
)
if
len
(
mimeType
)
>
0
{
w
.
Header
()
.
Add
(
"Content-Type"
,
mimeType
)
}
}
dr
,
err
:=
i
.
NewDagReader
(
nd
)
if
err
==
nil
{
io
.
Copy
(
w
,
dr
)
_
,
name
:=
path
.
Split
(
urlPath
)
// set modtime to a really long time ago, since files are immutable and should stay cached
modtime
:=
time
.
Unix
(
1
,
0
)
http
.
ServeContent
(
w
,
r
,
name
,
modtime
,
dr
)
return
}
...
...
@@ -120,9 +114,9 @@ func (i *gatewayHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
}
log
.
Debug
(
"listing directory"
)
if
path
[
len
(
p
ath
)
-
1
:
]
!=
"/"
{
if
urlPath
[
len
(
urlP
ath
)
-
1
:
]
!=
"/"
{
log
.
Debug
(
"missing trailing slash, redirect"
)
http
.
Redirect
(
w
,
r
,
"/ipfs/"
+
p
ath
+
"/"
,
307
)
http
.
Redirect
(
w
,
r
,
"/ipfs/"
+
urlP
ath
+
"/"
,
307
)
return
}
...
...
@@ -135,7 +129,7 @@ func (i *gatewayHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
log
.
Debug
(
"found index"
)
foundIndex
=
true
// return index page instead.
nd
,
err
:=
i
.
ResolvePath
(
p
ath
+
"/index.html"
)
nd
,
err
:=
i
.
ResolvePath
(
urlP
ath
+
"/index.html"
)
if
err
!=
nil
{
internalWebError
(
w
,
err
)
return
...
...
@@ -155,7 +149,7 @@ func (i *gatewayHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
if
!
foundIndex
{
// template and return directory listing
hndlr
:=
webHandler
{
"listing"
:
dirListing
,
"path"
:
p
ath
}
hndlr
:=
webHandler
{
"listing"
:
dirListing
,
"path"
:
urlP
ath
}
if
err
:=
i
.
dirList
.
Execute
(
w
,
hndlr
);
err
!=
nil
{
internalWebError
(
w
,
err
)
return
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论