1 回答
TA贡献1829条经验 获得超13个赞
为了避免为与您的文件匹配模式不匹配的文件创建大型缓冲区,我建议使用一种机制来传递您想要原封不动地提供的文件。这避免了将潜在的大型资产加载到内存中(例如 非网页视频文件)。*.htmlio.Reader100MB
对于与您的检查相匹配的文件 - 您的字符串替换可能很好,因为通常尺寸很小。html.html
所以试试这样的东西:
dir := http.Dir("my/path")
content, err := dir.Open("my_file") // check error
var r io.ReadSeeker // for http.ServeContent needs
if !strings.HasSuffix("some/web/uri", ".html") {
r = content // pass-through file content (avoid memory allocs)
} else {
// similar to what you had before
b := new(bytes.Buffer)
n, err := b.ReadFrom(content) // check err
defer content.Close()
new_html_content := "<whatever></body>"
newContent := strings.Replace(b.String(),
"</body>", new_html_content, 1)
r = bytes.NewReader([]byte(newContent))
}
d, _ := content.Stat()
http.ServeContent(w, r, "my/path", d.ModTime(), r)
- 1 回答
- 0 关注
- 55 浏览
添加回答
举报