gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 03:27:19 27 4
gpt4 key购买 nike

我正在使用 Go 为 Google AppEngine 编写一个应用程序,并且需要将一堆文件打包在一起,以便在用户导航到特定 URL 时提供给他们。目前文件是静态的,所以我可以通过在上传到服务器之前对它们进行压缩来解决这个问题。将来我想在打包之前动态更改它们,因此想学习如何根据请求打包和提供静态文件。

在我的 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,我已将此文件夹作为 static_dir 添加到 app.yaml 中。

当导航到适当的 URL 时,浏览器会下载一个只有 1 KB 大小的 tar 文件,并且看起来是空的。

如果有人能指出我哪里出错了,或者我误解了什么,我将不胜感激。我也很乐意提供您想要的任何其他详细信息。

谢谢!

最佳答案

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

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

关于http - 创建要通过 Google App Engine 提供的 tar 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36800168/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com