我正在使用archive/zip
库,在上传到s3之前,我需要对zip档案中的文件进行动态修改。目前我正在返回一个io.ReadCloser
,但我用来修改用户的功能需要一个io.Reader
:
//Function Signature:
Convert(r io.Reader, w io.Writer, ...)
我还需要一个io.Writer
。。。如果你能帮我决定如何创作一个作家,那就可以获得额外的积分。以下是一些示例代码,可以提供一些上下文:
for _, f := range r.File {
if filepath.Ext(f.Name) != ".txt" {
_, filename := path.Split(f.Name)
var rc io.ReadCloser
if rc, err = f.Open(); err == nil {
// FIXME: Convert
if err = Convert(rc.Reader, *zip.Writer.Create(f.Name), ...); err != nil {
errStr := fmt.Sprintf("Unable to convert")
log.Println(errStr)
} else {
log.Println("Success!")
}
// Upload to s3
.....
}
}
}
-
要将
io.ReadCloser
转换为io.Reader
,请执行以下操作:什么都没有
由于
io.Reader
接口的所有方法(特别是Read(p []byte) (n int, err error)
方法(也由io.ReadCloser
提供,io.ReadCloser
已经是io.Reader
。 -
将
io.Reader
转换为io.Writer
是完全不同的事情。你真的不能用任何一般的方式做到这一点。你需要详细说明你想做什么