resources.GetRemote
Syntax
resources.GetRemote URL [OPTIONS]
Returns
resource.Resource
{{ $url := "https://example.org/images/a.jpg" }}
{{ with resources.GetRemote $url }}
{{ with .Err }}
{{ errorf "%s" . }}
{{ else }}
<img src="{{ .RelPermalink }}" width="{{ .Width }}" height="{{ .Height }}" alt="">
{{ end }}
{{ else }}
{{ errorf "无法获取远程资源 %q" $url }}
{{ end }}
选项
resources.GetRemote
函数接受一个可选的选项参数。
{{ $url := "https://example.org/api" }}
{{ $opts := dict
"headers" (dict "Authorization" "Bearer abcd")
}}
{{ $resource := resources.GetRemote $url $opts }}
如果需要为相同的标头键设置多个值,请使用切片:
{{ $url := "https://example.org/api" }}
{{ $opts := dict
"headers" (dict "X-List" (slice "a" "b" "c"))
}}
{{ $resource := resources.GetRemote $url $opts }}
还可以更改请求方法并设置请求体:
{{ $url := "https://example.org/api" }}
{{ $opts := dict
"method" "post"
"body" `{"complete": true}`
"headers" (dict "Content-Type" "application/json")
}}
{{ $resource := resources.GetRemote $url $opts }}
远程数据
在检索远程数据时,使用 transform.Unmarshal
函数将响应解析为映射类型。
{{ $data := "" }}
{{ $url := "https://example.org/books.json" }}
{{ with resources.GetRemote $url }}
{{ with .Err }}
{{ errorf "%s" . }}
{{ else }}
{{ $data = . | transform.Unmarshal }}
{{ end }}
{{ else }}
{{ errorf "无法获取远程资源 %q" $url }}
{{ end }}
错误处理
由 resources.GetRemote
函数返回的资源的 Err
方法在 HTTP 请求失败时返回错误消息,否则返回空值。如果你没有处理这个错误,Hugo 将导致构建失败。
{{ $url := "https://broken-example.org/images/a.jpg" }}
{{ with resources.GetRemote $url }}
{{ with .Err }}
{{ errorf "%s" . }}
{{ else }}
<img src="{{ .RelPermalink }}" width="{{ .Width }}" height="{{ .Height }}" alt="">
{{ end }}
{{ else }}
{{ errorf "无法获取远程资源 %q" $url }}
{{ end }}
要将错误日志记录为警告而不是错误:
{{ $url := "https://broken-example.org/images/a.jpg" }}
{{ with resources.GetRemote $url }}
{{ with .Err }}
{{ warnf "%s" . }}
{{ else }}
<img src="{{ .RelPermalink }}" width="{{ .Width }}" height="{{ .Height }}" alt="">
{{ end }}
{{ else }}
{{ errorf "无法获取远程资源 %q" $url }}
{{ end }}
HTTP 响应
由 resources.GetRemote
函数返回的资源的 Data
方法返回来自 HTTP 响应的信息。
{{ $url := "https://example.org/images/a.jpg" }}
{{ with resources.GetRemote $url }}
{{ with .Err }}
{{ errorf "%s" . }}
{{ else }}
{{ with .Data }}
{{ .ContentLength }} → 42764
{{ .ContentType }} → image/jpeg
{{ .Status }} → 200 OK
{{ .StatusCode }} → 200
{{ .TransferEncoding }} → []
{{ end }}
{{ end }}
{{ else }}
{{ errorf "无法获取远程资源 %q" $url }}
{{ end }}
- ContentLength
- (
int
) 内容长度(以字节为单位)。 - ContentType
- (
string
) 内容类型。 - Status
- (
string
) HTTP 状态文本。 - StatusCode
- (
int
) HTTP 状态码。 - TransferEncoding
- (
string
) 传输编码。
缓存
从 resources.GetRemote
返回的资源会被缓存到磁盘上。有关详情,请参阅配置文件缓存。
默认情况下,Hugo 根据传递给函数的参数、URL 以及选项映射派生缓存键。
通过在选项映射中设置 key
来覆盖缓存键。使用这种方式可以更好地控制 Hugo 如何频繁地获取远程资源。
{{ $url := "https://example.org/images/a.jpg" }}
{{ $cacheKey := print $url (now.Format "2006-01-02") }}
{{ $resource := resource.GetRemote $url (dict "key" $cacheKey) }}