mirror of
https://github.com/mudler/LocalAI.git
synced 2025-05-20 02:24:59 +00:00
81 lines
1.9 KiB
Go
81 lines
1.9 KiB
Go
package utils
|
|
|
|
import (
|
|
"bufio"
|
|
"encoding/base64"
|
|
"fmt"
|
|
"io"
|
|
"mime/multipart"
|
|
"net/http"
|
|
"os"
|
|
|
|
"github.com/rs/zerolog/log"
|
|
)
|
|
|
|
func CreateTempFileFromMultipartFile(file *multipart.FileHeader, tempDir string, tempPattern string) (string, error) {
|
|
|
|
f, err := file.Open()
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
defer f.Close()
|
|
|
|
// Create a temporary file in the requested directory:
|
|
outputFile, err := os.CreateTemp(tempDir, tempPattern)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
defer outputFile.Close()
|
|
|
|
if _, err := io.Copy(outputFile, f); err != nil {
|
|
log.Debug().Msgf("Audio file copying error %+v - %+v - err %+v", file.Filename, outputFile, err)
|
|
return "", err
|
|
}
|
|
|
|
return outputFile.Name(), nil
|
|
}
|
|
|
|
func CreateTempFileFromBase64(base64data string, tempDir string, tempPattern string) (string, error) {
|
|
if len(base64data) == 0 {
|
|
return "", fmt.Errorf("base64data empty?")
|
|
}
|
|
//base 64 decode the file and write it somewhere
|
|
// that we will cleanup
|
|
decoded, err := base64.StdEncoding.DecodeString(base64data)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
// Create a temporary file in the requested directory:
|
|
outputFile, err := os.CreateTemp(tempDir, tempPattern)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
defer outputFile.Close()
|
|
// write the base64 result
|
|
writer := bufio.NewWriter(outputFile)
|
|
_, err = writer.Write(decoded)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
return outputFile.Name(), nil
|
|
}
|
|
|
|
func CreateTempFileFromUrl(url string, tempDir string, tempPattern string) (string, error) {
|
|
// Get the data
|
|
resp, err := http.Get(url)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
defer resp.Body.Close()
|
|
|
|
// Create the file
|
|
out, err := os.CreateTemp(tempDir, tempPattern)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
defer out.Close()
|
|
|
|
// Write the body to file
|
|
_, err = io.Copy(out, resp.Body)
|
|
return out.Name(), err
|
|
}
|