为了账号安全,请及时绑定邮箱和手机立即绑定

创建要通过 Google App Engine 提供的 tar 文件

创建要通过 Google App Engine 提供的 tar 文件

Go
白衣染霜花 2022-01-04 21:27:13
我正在使用 Go 为 Google AppEngine 编写一个应用程序,当用户导航到特定的 URL 时,需要将一堆文件压缩在一起以提供给用户。目前文件是静态的,所以我可以通过在上传到服务器之前对它们进行 tar 处理来解决这个问题。将来我想在tarring之前动态地改变它们,所以想学习如何tar和按需提供静态文件。在我的 init() 函数中,我有以下几行:http.HandleFunc("/download.tar", tarit)tarit 函数是我遇到的问题,它目前如下所示: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    })}我尝试添加到 tarball 中的文件位于 /files 中,并且我已将此文件夹添加为 app.yaml 中的 static_dir。导航到相应的 URL 时,浏览器会下载一个大小仅为 1 KB 且显示为空的 tar 文件。如果有人能指出我哪里出错了,或者我误解了什么,我将不胜感激。我也很乐意提供您想要的任何其他详细信息。
查看完整描述

1 回答

?
弑天下

TA贡献1818条经验 获得超8个赞

使用相对于包含 app.yaml 的目录的路径指定目录。发布代码中的路径是绝对路径“/files”。也许您应该将其更改为“文件”。

记录从 os.Stat 和 filepath.Walk 返回的错误。这些错误可能会导致您遇到问题。


查看完整回答
反对 回复 2022-01-04
  • 1 回答
  • 0 关注
  • 129 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信