From bb0eb4a42be2c004a3c2ce59a8c748a9822b5f99 Mon Sep 17 00:00:00 2001 From: xuri Date: Wed, 1 Dec 2021 00:10:31 +0800 Subject: This closes #1075, reload temporary files into memory on save --- file.go | 10 +++++++++- file_test.go | 9 +++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/file.go b/file.go index c0092a2..a430c5f 100644 --- a/file.go +++ b/file.go @@ -196,6 +196,14 @@ func (f *File) writeToZip(zw *zip.Writer) error { _, err = fi.Write(content.([]byte)) return true }) - + f.tempFiles.Range(func(path, content interface{}) bool { + var fi io.Writer + fi, err = zw.Create(path.(string)) + if err != nil { + return false + } + _, err = fi.Write(f.readBytes(path.(string))) + return true + }) return err } diff --git a/file_test.go b/file_test.go index ee5d322..8e65c5d 100644 --- a/file_test.go +++ b/file_test.go @@ -62,6 +62,15 @@ func TestWriteTo(t *testing.T) { _, err := f.WriteTo(bufio.NewWriter(&buf)) assert.Nil(t, err) } + // Test write with temporary file + { + f, buf := File{tempFiles: sync.Map{}}, bytes.Buffer{} + const maxUint16 = 1<<16 - 1 + f.tempFiles.Store("s", "") + f.tempFiles.Store(strings.Repeat("s", maxUint16+1), "") + _, err := f.WriteTo(bufio.NewWriter(&buf)) + assert.EqualError(t, err, "zip: FileHeader.Name too long") + } } func TestClose(t *testing.T) { -- cgit v1.2.1