Google App EngineのアプリケーションはGoを使用して作成しており、特定のURLに移動したときにユーザーに提供するために複数のファイルを一緒にタールする必要があります。現時点ではファイルは静的なので、サーバーにアップロードする前にこの問題を解決することができます。将来、私はタールリングの前にそれらを動的に変更したいので、要求に応じて静的ファイルを&に配信する方法を学びたいと思います。私のinit()関数でGoogle App Engine経由で提供されるtarファイルの作成
私は次の行を持っている:
http.HandleFunc("/download.tar", tarit)
機能tarit私はとの問題を抱えています1があるが、それは現在、以下のようになります。
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ファイルをダウンロードし、空であるように見えます。
誰かが間違っているか、私が誤解していることを指摘できるかどうか、非常に感謝します。私はまた、あなたが望む他の詳細を提供することを非常に嬉しく思います。
ありがとうございます!
関連:[Go AppEngineでファイルを読み込む正しい方法](http://stackoverflow.com/questions/36717098/correct-way-to-read-file-in-go-appengine)ファイルにアクセスする方法と、静的とマークされたファイル/フォルダは、デフォルトでは利用できないという規則があります。リンクされた質問+回答を読んでください。 – icza