Move logic for dealing with image file uploads to userfile

This commit is contained in:
Eli Ribble 2025-12-18 03:36:52 -07:00
parent cdce910241
commit e071aa4adc
2 changed files with 23 additions and 17 deletions

View file

@ -149,28 +149,14 @@ func apiImageContentPost(w http.ResponseWriter, r *http.Request, u *models.User)
log.Error().Err(err).Msg("Failed to parse image UUID") log.Error().Err(err).Msg("Failed to parse image UUID")
http.Error(w, "Failed to parse image UUID", http.StatusBadRequest) http.Error(w, "Failed to parse image UUID", http.StatusBadRequest)
} }
// Read first 8 bytes to check PNG signature err = userfile.ImageFileContentWrite(imageUUID, r.Body)
filepath := fmt.Sprintf("%s/%s.photo", userfile.UserFilesDirectory, imageUUID.String())
// Create file in configured directory
dst, err := os.Create(filepath)
if err != nil { if err != nil {
log.Printf("Failed to create image file %s: %v", filepath, err) render.Render(w, r, errRender(err))
http.Error(w, "Unable to create file", http.StatusInternalServerError)
return return
} }
defer dst.Close()
// Copy rest of request body to file
_, err = io.Copy(dst, r.Body)
if err != nil {
http.Error(w, "Unable to save file", http.StatusInternalServerError)
return
}
w.WriteHeader(http.StatusOK) w.WriteHeader(http.StatusOK)
log.Printf("Saved image file %s\n", imageUUID) log.Printf("Saved image file %s\n", imageUUID)
fmt.Fprintf(w, "PNG uploaded successfully to %s", filepath) fmt.Fprintf(w, "PNG uploaded successfully")
} }
func apiMosquitoSource(w http.ResponseWriter, r *http.Request, u *models.User) { func apiMosquitoSource(w http.ResponseWriter, r *http.Request, u *models.User) {

View file

@ -41,3 +41,23 @@ func AudioFileContentWrite(audioUUID uuid.UUID, body io.Reader) error {
log.Printf("Saved audio content to %s\n", filepath) log.Printf("Saved audio content to %s\n", filepath)
return nil return nil
} }
func ImageFileContentPathRaw(uid string) string {
return fmt.Sprintf("%s/%s.raw", UserFilesDirectory, uid)
}
func ImageFileContentWrite(uid uuid.UUID, body io.Reader) error {
filepath := ImageFileContentPathRaw(uid.String())
// Create file in configured directory
dst, err := os.Create(filepath)
if err != nil {
return fmt.Errorf("Failed to create image file %s: %w", filepath, err)
}
defer dst.Close()
// Copy rest of request body to file
_, err = io.Copy(dst, body)
if err != nil {
return fmt.Errorf("Unable to save file %s: %w", filepath, err)
}
return nil
}