在Go中,我们如何在没有压缩的情况下将文件添加到zip存档?
对于上下文,我跟随IBM tutorial一起创建一个epub zip文件。它显示了以下Python代码:
import zipfile, os
def create_archive(path='/path/to/our/epub/directory'):
'''Create the ZIP archive. The mimetype must be the first file in the archive
and it must not be compressed.'''
epub_name = '%s.epub' % os.path.basename(path)
# The EPUB must contain the META-INF and mimetype files at the root, so
# we'll create the archive in the working directory first and move it later
os.chdir(path)
# Open a new zipfile for writing
epub = zipfile.ZipFile(epub_name, 'w')
# Add the mimetype file first and set it to be uncompressed
epub.write(MIMETYPE, compress_type=zipfile.ZIP_STORED)
# For the remaining paths in the EPUB, add all of their files
# using normal ZIP compression
for p in os.listdir('.'):
for f in os.listdir(p):
epub.write(os.path.join(p, f)), compress_type=zipfile.ZIP_DEFLATED)
epub.close()
在此示例中,不得压缩文件mimetype
(仅限内容application/epub+zip
)。
Go documentation确实提供了写入zip存档的一个示例,但所有文件都已压缩。
答案 0 :(得分:6)
有两种方法可以将文件添加到文件zip.Writer
:Create
方法和CreateHeader
。虽然Create
只允许您指定文件名,但CreateHeader
方法提供了更大的灵活性,包括设置压缩方法的功能。
例如:
w, err := zipwriter.CreateHeader(&zip.FileHeader{
Name: filename,
Method: zip.Store,
})
您现在可以将数据写入w
,与Go文档中的示例代码相同,它将存储在zip文件中而不会压缩。