Я пишу приложение для Google AppEngine с помощью Go, и вам нужно собрать вместе множество файлов, которые будут использоваться для пользователя, когда они будут перемещаться по определенному URL-адресу. На данный момент файлы являются статическими, поэтому я могу решить эту проблему, выполнив их до загрузки на сервер. В будущем я хотел бы динамически изменить их до tarring, и поэтому хотел бы узнать, как tar & обслуживать статические файлы по запросу.Создание файла tar для обслуживания через Google App Engine
В моей функции инициализации() У меня есть следующие строки:
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 браузер загружает tar-файл размером всего в 1 КБ и выглядит пустым.
Я был бы очень признателен, если бы кто-нибудь мог указать, где я ошибаюсь, или то, что я недопонимаю. Я также был бы очень рад предоставить любые другие детали, которые вы хотели бы.
Спасибо!
Связанный: [Правильный способ чтения файла в Go AppEngine] (http://stackoverflow.com/questions/36717098/correct-way-to-read-file-in-go-appengine). Существуют определенные правила доступа к файлу, а также файлы/папки, помеченные как статические, по умолчанию недоступны. Прочтите связанный вопрос + ответ. – icza