当我在调查如何在Pharo中创建Zip文件时,我遇到了这个已解决的堆栈问题:How do you compress a directory in Squeak Smalltalk?。
我探索了这个类,我发现你可以使用方法addString: 'string' as: 'myFile.txt'
动态地为它添加字符串(如果我没错的话)。因此,下一步和最后一步是将其输出为流,因为我希望它能够在海边的锚点回调中动态生成,因此可以自动生成并下载而无需创建任何临时文件。
我尝试了很多组合,但我无法正确处理这个问题。另外,一个附带问题,如果提到的方法,如果字符串是二进制的,它会被视为字符串还是二进制文件?
感谢您的回复。
编辑:我发现方法writeTo: stream
应该是我想要的,只是因为我不知道要为它创建哪种流。 WriteStream with: String new
没有用。 ByteString new writeStream
我总是得到Improper store into indexable object
错误
EDIT2:我尝试了以下代码:
| z str |
z := ZipArchive new.
z
addString: someBinaryPNGString as: 'myFile.png';
addString: someBinaryPNGString as: 'another.png'.
str := "Initialize the stream here somehow"
z writeTo: str
其中someBinaryPNGString来自base64文本,并且"在这里以某种方式初始化流"是我失踪的部分。
这甚至是正确创建ZIP文件的正确方法吗?
答案 0 :(得分:0)
这个怎么样?
member := ZipStringMember new contents: 'Hello world'.
zip := #[] writeStream.
member writeTo: zip
^zip contents