Skip to content

Commit 05a0d3c

Browse files
fix(zip): delete temporary file after transferring it (#304)
* Fixing deleting temporary files * style(util): * chore(deps): go mod tidy --------- Co-authored-by: Claudio d'Angelis <claudiodangelis@gmail.com>
1 parent 8f16bfb commit 05a0d3c

3 files changed

Lines changed: 77 additions & 20 deletions

File tree

go.mod

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ require (
77
github.com/asaskevich/govalidator v0.0.0-20200108200545-475eaeb16496
88
github.com/eiannone/keyboard v0.0.0-20200508000154-caf4b762e807
99
github.com/glendc/go-external-ip v0.1.0
10-
github.com/jhoonb/archivex v0.0.0-20180718040744-0488e4ce1681
1110
github.com/manifoldco/promptui v0.7.0
1211
github.com/mattn/go-runewidth v0.0.9 // indirect
1312
github.com/skip2/go-qrcode v0.0.0-20191027152451-9434209cb086

go.sum

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1045,8 +1045,6 @@ github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:
10451045
github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
10461046
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
10471047
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
1048-
github.com/jhoonb/archivex v0.0.0-20180718040744-0488e4ce1681 h1:EiEjLram6Y0WXygV4WyzKmTr3XaR4CD3tvjdTrsk3cU=
1049-
github.com/jhoonb/archivex v0.0.0-20180718040744-0488e4ce1681/go.mod h1:GN1Mg/uXQ6qwXA0HypnUO3xlcQJS9/y68EsHNeuuRa4=
10501048
github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4=
10511049
github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
10521050
github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=

util/util.go

Lines changed: 77 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package util
22

33
import (
4+
"archive/zip"
45
"crypto/rand"
56
"encoding/base64"
67
"errors"
@@ -14,8 +15,6 @@ import (
1415
"strconv"
1516
"strings"
1617
"time"
17-
18-
"github.com/jhoonb/archivex"
1918
)
2019

2120
// Expand tilde in paths
@@ -33,44 +32,105 @@ func Expand(input string) string {
3332
return input
3433
}
3534

35+
// add folder to the zip file
36+
func addFolderToZip(zipWriter *zip.Writer, source, target string) error {
37+
38+
//explore the folder and add all to the zip
39+
return filepath.Walk(source, func(path string, info os.FileInfo, err error) error {
40+
if err != nil {
41+
return err
42+
}
43+
44+
header, err := zip.FileInfoHeader(info)
45+
if err != nil {
46+
return err
47+
}
48+
header.Name = path
49+
50+
if info.IsDir() {
51+
header.Name += "/"
52+
} else {
53+
header.Method = zip.Deflate
54+
}
55+
56+
writer, err := zipWriter.CreateHeader(header)
57+
if err != nil {
58+
return err
59+
}
60+
61+
if info.IsDir() {
62+
return nil
63+
}
64+
65+
file, err := os.Open(path)
66+
if err != nil {
67+
return err
68+
}
69+
defer file.Close()
70+
71+
_, err = io.Copy(writer, file)
72+
return err
73+
})
74+
}
75+
76+
// add files to the zip file
77+
func addFileToZip(zipWriter *zip.Writer, fileToAdd string) error {
78+
f1, err := os.Open(fileToAdd)
79+
if err != nil {
80+
return err
81+
}
82+
defer f1.Close()
83+
84+
w1, err := zipWriter.Create(filepath.Base(fileToAdd))
85+
if err != nil {
86+
panic(err)
87+
}
88+
if _, err := io.Copy(w1, f1); err != nil {
89+
panic(err)
90+
}
91+
92+
return nil
93+
}
94+
3695
// ZipFiles and return the resulting zip's filename
3796
func ZipFiles(files []string) (string, error) {
38-
zip := new(archivex.ZipFile)
39-
tmpfile, err := ioutil.TempFile("", "qrcp")
97+
//create temporary file
98+
tmpfile, err := os.CreateTemp("", "qrcp")
4099
if err != nil {
41100
return "", err
42101
}
102+
tempFileName := tmpfile.Name() + ".zip"
43103
tmpfile.Close()
44-
if err := os.Rename(tmpfile.Name(), tmpfile.Name()+".zip"); err != nil {
104+
if err := os.Rename(tmpfile.Name(), tempFileName); err != nil {
45105
return "", err
46106
}
47-
if err := zip.Create(tmpfile.Name() + ".zip"); err != nil {
107+
108+
//create zip file
109+
zipFile, err := os.Create(tempFileName)
110+
if err != nil {
48111
return "", err
49112
}
113+
defer zipFile.Close()
114+
115+
//add files and folder in the zip
116+
zipWriter := zip.NewWriter(zipFile)
117+
defer zipWriter.Close()
50118
for _, filename := range files {
51119
fileinfo, err := os.Stat(filename)
52120
if err != nil {
53121
return "", err
54122
}
55123
if fileinfo.IsDir() {
56-
if err := zip.AddAll(filename, true); err != nil {
124+
if err := addFolderToZip(zipWriter, filename, tempFileName); err != nil {
57125
return "", err
58126
}
59127
} else {
60-
file, err := os.Open(filename)
61-
if err != nil {
62-
return "", err
63-
}
64-
defer file.Close()
65-
if err := zip.Add(filename, file, fileinfo); err != nil {
128+
if err := addFileToZip(zipWriter, filename); err != nil {
66129
return "", err
67130
}
68131
}
69132
}
70-
if err := zip.Close(); err != nil {
71-
return "", nil
72-
}
73-
return zip.Name, nil
133+
return tempFileName, nil
74134
}
75135

76136
// GetRandomURLPath returns a random string of 4 alphanumeric characters

0 commit comments

Comments
 (0)