From 60af2e82afae9ff7f14b30b49d257582ebd6da82 Mon Sep 17 00:00:00 2001 From: kolaente Date: Sun, 21 Jun 2020 14:53:30 +0200 Subject: [PATCH] Restore files --- pkg/files/files.go | 7 ++++++- pkg/modules/dump/restore.go | 26 ++++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/pkg/files/files.go b/pkg/files/files.go index 060f6f5ce..94b5505a7 100644 --- a/pkg/files/files.go +++ b/pkg/files/files.go @@ -96,7 +96,7 @@ func Create(f io.ReadCloser, realname string, realsize uint64, a web.Auth) (file } // Save the file to storage with its new ID as path - err = afs.WriteReader(file.getFileName(), f) + err = file.Save(f) return } @@ -113,3 +113,8 @@ func (f *File) Delete() (err error) { err = afs.Remove(f.getFileName()) return } + +// Save saves a file to storage +func (f *File) Save(fcontent io.ReadCloser) error { + return afs.WriteReader(f.getFileName(), fcontent) +} diff --git a/pkg/modules/dump/restore.go b/pkg/modules/dump/restore.go index ae54b920d..5e2694cc2 100644 --- a/pkg/modules/dump/restore.go +++ b/pkg/modules/dump/restore.go @@ -31,6 +31,7 @@ import ( "os" "sort" "src.techknowlogick.com/xormigrate" + "strconv" "strings" ) @@ -140,6 +141,31 @@ func Restore(filename string) error { /////// // Restore Files + for i, file := range filesFiles { + id, err := strconv.ParseInt(i, 10, 64) + if err != nil { + return fmt.Errorf("could not parse file id %s: %s", i, err) + } + + f := &files.File{ID: id} + + fc, err := file.Open() + if err != nil { + return fmt.Errorf("could not open file %s: %s", i, err) + } + + if err := f.Save(fc); err != nil { + return fmt.Errorf("could not save file: %s", err) + } + + _ = fc.Close() + log.Infof("Restored file %s", i) + } + log.Infof("Restored %d files.", len(filesFiles)) + + /////// + // Done + log.Infof("Done restoring dump.") return nil }