Add more things for file handling
This commit is contained in:
parent
c813c4784a
commit
1fcf47bffc
14 changed files with 284 additions and 59 deletions
44
web/public/media.go
Normal file
44
web/public/media.go
Normal file
|
@ -0,0 +1,44 @@
|
|||
package webpublic
|
||||
|
||||
import (
|
||||
"io"
|
||||
"net/http"
|
||||
|
||||
webutils "git.mstar.dev/mstar/goutils/http"
|
||||
"github.com/rs/zerolog/hlog"
|
||||
|
||||
"git.mstar.dev/mstar/linstrom/media"
|
||||
"git.mstar.dev/mstar/linstrom/storage-new/dbgen"
|
||||
)
|
||||
|
||||
func downloadMediaHander(w http.ResponseWriter, r *http.Request) {
|
||||
mediaId := r.PathValue("id")
|
||||
log := hlog.FromRequest(r)
|
||||
mm := dbgen.MediaMetadata
|
||||
fileReader, err := media.GlobalServer.ReadFileId(mediaId)
|
||||
switch err {
|
||||
case nil:
|
||||
case media.ErrFileNotFound:
|
||||
_ = webutils.ProblemDetailsStatusOnly(w, http.StatusNotFound)
|
||||
return
|
||||
default:
|
||||
log.Error().Err(err).Str("file-id", mediaId).Msg("Failed to get file")
|
||||
_ = webutils.ProblemDetailsStatusOnly(w, http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
defer func() { _ = fileReader.Close() }()
|
||||
meta, err := mm.Where(mm.ID.Eq(mediaId)).Select(mm.Type).First()
|
||||
if err != nil {
|
||||
log.Error().
|
||||
Err(err).
|
||||
Str("file-id", mediaId).
|
||||
Msg("Failed to get file metadata after already getting file")
|
||||
_ = webutils.ProblemDetailsStatusOnly(w, http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
w.Header().Add("Content-Type", meta.Type)
|
||||
_, err = io.Copy(w, fileReader)
|
||||
if err != nil {
|
||||
log.Error().Err(err).Msg("Failed to copy file to request")
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue