23/04/2021 - GO
In this example we are going to create a temporary file in an existing directory and store it there. This is useful if you want to get rid of this file once you are done with it. You can also create a temporary folder. See other usages here.
package main
import (
"log"
)
func main() {
str := NewStorage()
if err := str.Write([]byte("Hello World!")); err != nil {
log.Fatalln(err)
}
path, err := str.Store("tmp/", ".txt")
if err != nil {
log.Fatalln(err)
}
log.Println(path)
// Result
// tmp/606364987.txt
}
package main
import (
"bytes"
"io/ioutil"
)
type Storage struct {
*bytes.Buffer
}
func NewStorage() *Storage {
return &Storage{
&bytes.Buffer{},
}
}
// Write appends each data chunk to the current buffer.
func (s *Storage) Write(chunk []byte) error {
_, err := s.Buffer.Write(chunk)
return err
}
// Store creates a new globally unique temporary file and stores in a specific
// directory. Given that this is a "temporary" file, you should handle removing
// the file. E.g. defer os.Remove(tmp.Name())
func (s *Storage) Store(dir, ext string) (string, error) {
tmp, err := ioutil.TempFile(dir, "*"+ext)
if err != nil {
return "", err
}
defer tmp.Close()
if _, err := tmp.Write(s.Buffer.Bytes()); err != nil {
return "", err
}
return tmp.Name(), nil
}