为了账号安全,请及时绑定邮箱和手机立即绑定

需要来自 zip 存档条目的 io.ReaderAt(该条目是嵌套的 .xlsx 文件)

需要来自 zip 存档条目的 io.ReaderAt(该条目是嵌套的 .xlsx 文件)

Go
长风秋雁 2021-06-29 13:11:06
让我先说明这个问题,因为我已经知道 excel 2007 文件本身就是一个 .zip 文件,重命名为 .xlsx。好的,既然你知道这是交易。我正在尝试从内存中的 .zip 存档中提取 Excel 2007 文件。我不能(相反,我真的不想)将整个存档提取到磁盘,然后从那里处理 .xlsx 文件。问题是我们读取 excel 2007 文件的方法需要 ReadAt 方法(例如io.ReaderAt定义的方法)。不幸的是,archive/zip 包为zip 文件条目公开了一个接口,该接口只返回io.ReadCloser。有什么办法可以解决这种情况吗?同样,我想在内存中完成这一切,根本不刷新到磁盘。
查看完整描述

1 回答

?
富国沪深

TA贡献1790条经验 获得超9个赞

因为 ZIP 格式不允许在没有首先解压缩整个文件的情况下实现 ReadAt,所以您需要完全这样做。


这并不意味着您必须将其保存到磁盘,而是您可以将其解压缩到内存中,然后Reader在bytes包中使用:


// ReadAll reads from readCloser until EOF and returns the data as a []byte

b, err := ioutil.ReadAll(readCloser) // The readCloser is the one from the zip-package

if err != nil {

    panic(err)

}


// bytes.Reader implements io.Reader, io.ReaderAt, etc. All you need!

readerAt := bytes.NewReader(b)


查看完整回答
反对 回复 2021-07-05
  • 1 回答
  • 0 关注
  • 247 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信