2016-04-22 16 views
0

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ファイルをダウンロードし、空であるように見えます。

誰かが間違っているか、私が誤解していることを指摘できるかどうか、非常に感謝します。私はまた、あなたが望む他の詳細を提供することを非常に嬉しく思います。

ありがとうございます!

+0

関連:[Go AppEngineでファイルを読み込む正しい方法](http://stackoverflow.com/questions/36717098/correct-way-to-read-file-in-go-appengine)ファイルにアクセスする方法と、静的とマークされたファイル/フォルダは、デフォルトでは利用できないという規則があります。リンクされた質問+回答を読んでください。 – icza

答えて

0

ディレクトリをapp.yamlを含むディレクトリからの相対パスで指定します。投稿されたコードのパスは絶対パス "/ files"です。おそらくあなたは "ファイル"に変更する必要があります。

os.Statおよびfilepath.Walkから返されたエラーを記録します。このエラーは、おそらく問題につながるでしょう。

+0

ありがとうございます。あなたが言ったように、タリット関数のパスは相対的である必要がありました。また、app.yamlに@iczaの提案するように 'application_readable:true'を追加しました。 – smolloy

関連する問題