创建要通过 Google App Engine 提供的 tar 文件
Creating a tar file to be served via Google App Engine
我正在使用 Go 为 Google AppEngine 编写应用程序,需要 tar 将一堆文件放在一起,以便在用户导航到特定 URL 时提供给他们.目前文件是静态的,所以我可以通过 tar 在上传到服务器之前给它们打电话来解决这个问题。将来我想在 tar 响铃之前动态更改它们,因此想学习如何 tar 并根据请求提供静态文件。
在我的 init() 函数中有以下行:
http.HandleFunc("/download.tar", tarit)
函数 tar这是我遇到问题的函数,目前看起来如下所示:
func tarit(w http.ResponseWriter, r *http.Request) {
tarball := tar.NewWriter(w)
defer tarball.Close()
info, err := os.Stat("/files")
if err != nil {
return
}
var baseDir string
if info.IsDir() {
baseDir = filepath.Base("/files")
}
filepath.Walk("/files", func(path string, info os.FileInfo, err error) error {
if err != nil {
return err
}
header, err := tar.FileInfoHeader(info, info.Name())
if err != nil {
return err
}
if baseDir != "" {
header.Name = filepath.Join(baseDir, strings.TrimPrefix(path, "/files"))
}
if err := tarball.WriteHeader(header); err != nil {
return err
}
if info.IsDir() {
return nil
}
file, err := os.Open(path)
if err != nil {
return err
}
defer file.Close()
_, err = io.Copy(tarball, file)
return err
})
}
我试图添加到 tar 球的文件位于 /files,我已将此文件夹作为 static_dir 添加到 app.yaml。
当导航到适当的 URL 时,浏览器会下载一个 tar 文件,该文件大小只有 1 KB,而且看起来是空的。
如果有人能指出我哪里错了,或者我误解了什么,我将不胜感激。我也很乐意提供您想要的任何其他详细信息。
谢谢!
使用相对于包含 app.yaml 的目录的路径指定目录。发布代码中的路径是绝对路径“/files”。也许您应该将其更改为 "files".
记录从 os.Stat 和 filepath.Walk 返回的错误。这些错误可能会导致您遇到问题。
我正在使用 Go 为 Google AppEngine 编写应用程序,需要 tar 将一堆文件放在一起,以便在用户导航到特定 URL 时提供给他们.目前文件是静态的,所以我可以通过 tar 在上传到服务器之前给它们打电话来解决这个问题。将来我想在 tar 响铃之前动态更改它们,因此想学习如何 tar 并根据请求提供静态文件。
在我的 init() 函数中有以下行:
http.HandleFunc("/download.tar", tarit)
函数 tar这是我遇到问题的函数,目前看起来如下所示:
func tarit(w http.ResponseWriter, r *http.Request) {
tarball := tar.NewWriter(w)
defer tarball.Close()
info, err := os.Stat("/files")
if err != nil {
return
}
var baseDir string
if info.IsDir() {
baseDir = filepath.Base("/files")
}
filepath.Walk("/files", func(path string, info os.FileInfo, err error) error {
if err != nil {
return err
}
header, err := tar.FileInfoHeader(info, info.Name())
if err != nil {
return err
}
if baseDir != "" {
header.Name = filepath.Join(baseDir, strings.TrimPrefix(path, "/files"))
}
if err := tarball.WriteHeader(header); err != nil {
return err
}
if info.IsDir() {
return nil
}
file, err := os.Open(path)
if err != nil {
return err
}
defer file.Close()
_, err = io.Copy(tarball, file)
return err
})
}
我试图添加到 tar 球的文件位于 /files,我已将此文件夹作为 static_dir 添加到 app.yaml。
当导航到适当的 URL 时,浏览器会下载一个 tar 文件,该文件大小只有 1 KB,而且看起来是空的。
如果有人能指出我哪里错了,或者我误解了什么,我将不胜感激。我也很乐意提供您想要的任何其他详细信息。
谢谢!
使用相对于包含 app.yaml 的目录的路径指定目录。发布代码中的路径是绝对路径“/files”。也许您应该将其更改为 "files".
记录从 os.Stat 和 filepath.Walk 返回的错误。这些错误可能会导致您遇到问题。