Go 中将 io.ReadCloser 转换为 io.Reader

Noa*_*ary 2 zip go writer reader

我正在使用该archive/zip库,并且需要在将 zip 存档内的文件上传到 s3 之前对其进行即时修改。目前我正在返回,io.ReadCloser但我用来修改用户的函数需要io.Reader

//Function Signature:
Convert(r io.Reader, w io.Writer, ...)
Run Code Online (Sandbox Code Playgroud)

我还需要一个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
        .....
      }   
    }   
  }
Run Code Online (Sandbox Code Playgroud)

Fli*_*mzy 11

  1. 要将 an 转换io.ReadCloser为 an,io.Reader您可以执行以下操作:

    没有什么!

    Anio.ReadCloser已经是 an io.Reader,因为io.Reader接口的所有方法(特别是Read(p []byte) (n int, err error)方法)也由 提供io.ReadCloser

  2. 将 an 转换io.Reader为 anio.Writer是完全不同的事情。你不能以任何一般的方式真正做到这一点。您需要详细说明您想要做什么。