项目作者: linfangrong

项目描述 :
高级语言: Go
项目地址: git://github.com/linfangrong/temporary.git
创建时间: 2019-03-01T10:56:02Z
项目社区:https://github.com/linfangrong/temporary

开源协议:MIT License

下载


temporary

godoc

场景

将io.Reader转换成io.ReadSeeker。

  1. 数据大小超过maxBufferSize时, 写入到临时文件ioutil.TempFile(fileDir, filePattern).
  2. 提供异步操作流程NewAsyncTemporary/NewMustCloseReaderAsyncTemporary, 在调用其他方法之前一定要先使用Await().
  3. 数据结果操作.
    • Size() 数据大小
    • Type() TemporaryBuffer | TemporaryFile
    • Name() 当类型为文件(TemporaryFile)时, 返回临时文件名.
    • Bytes() 当类型为缓存(TemporaryBuffer)时, 返回[]byte.

temporary.Temporary

  1. type Temporary interface {
  2. Await() error
  3. Size() int64
  4. Type() string
  5. Name() string
  6. Bytes() []byte
  7. io.Reader
  8. io.Seeker
  9. io.Closer
  10. }

同步方式

  1. func NewTemporary(reader io.Reader, maxBufferSize int64, fileDir string, filePattern string) (_ Temporary, err error)

Example

  1. package main
  2. import (
  3. "github.com/linfangrong/temporary"
  4. )
  5. func main() {
  6. var (
  7. temp temporary.Temporary
  8. err error
  9. )
  10. if temp, err = temporary.NewTemporary(
  11. reader, // io.Reader
  12. 2*1024*1204, // maxBufferSize 超过这个长度, 会转化成临时文件
  13. "/tmp", // fileDir 临时文件目录
  14. "*", // filePattern 文件名生成方式
  15. ); err != nil {
  16. // TODO error
  17. return
  18. }
  19. defer temp.Close()
  20. //
  21. // temp 可以当做io.ReadSeeker
  22. // Size() int64
  23. // io.Reader
  24. // io.Seeker
  25. // io.Closer
  26. //
  27. // 判断存储方式的类型
  28. // Type() string
  29. // Name() string Type: TemporaryFile
  30. // Bytes() []byte Type: TemporaryBuffer
  31. ...
  32. }

异步方式

  1. func NewAsyncTemporary(reader io.Reader, maxBufferSize int64, fileDir string, filePattern string) (_ Temporary)
  2. func NewMustCloseReaderAsyncTemporary(readcloser io.ReadCloser, maxBufferSize int64, fileDir string, filePattern string) (_ Temporary)