| 114 | } |
| 115 | |
| 116 | func UpdateZipCode(b []byte, files []*map[string]string) ([]byte, error) { |
| 117 | bufferc := bytes.NewBuffer(nil) |
| 118 | zipWriter := zip.NewWriter(bufferc) |
| 119 | |
| 120 | var err error |
| 121 | defer func() { |
| 122 | if err != nil { |
| 123 | zipWriter.Close() |
| 124 | } |
| 125 | }() |
| 126 | |
| 127 | //read |
| 128 | r := bytes.NewReader(b) |
| 129 | zipReader, err := zip.NewReader(r, int64(len(b))) |
| 130 | if err != nil { |
| 131 | return nil, err |
| 132 | } |
| 133 | for _, file := range zipReader.File { |
| 134 | needCopy := true |
| 135 | for _, wfile := range files { |
| 136 | if file.FileHeader.Name == (*wfile)["fileName"] { |
| 137 | needCopy = false |
| 138 | } |
| 139 | } |
| 140 | if needCopy == true { |
| 141 | f, err := file.Open() |
| 142 | if err != nil { |
| 143 | return nil, err |
| 144 | } |
| 145 | writer, err := zipWriter.CreateHeader(&file.FileHeader) |
| 146 | if err != nil { |
| 147 | return nil, err |
| 148 | } |
| 149 | _, err = io.Copy(writer, f) |
| 150 | |
| 151 | if err != nil { |
| 152 | return nil, err |
| 153 | } |
| 154 | f.Close() |
| 155 | } |
| 156 | |
| 157 | } |
| 158 | for _, wfile := range files { |
| 159 | writer, err := zipWriter.Create((*wfile)["fileName"]) |
| 160 | if err != nil { |
| 161 | return nil, err |
| 162 | } |
| 163 | _, err = writer.Write([]byte((*wfile)["fileBytes"])) |
| 164 | if err != nil { |
| 165 | return nil, err |
| 166 | } |
| 167 | } |
| 168 | |
| 169 | zipWriter.Close() |
| 170 | return bufferc.Bytes(), nil |
| 171 | } |