Skip to content

Commit

Permalink
Fix XMP file upload issue (#663)
Browse files Browse the repository at this point in the history
* Refactor uploadAsset and writeFilePart methods for improved file handling

* fix: #662 XMP not uploaded

* remove debug code
  • Loading branch information
simulot authored Feb 2, 2025
1 parent d4259d1 commit 9f238df
Showing 1 changed file with 6 additions and 19 deletions.
25 changes: 6 additions & 19 deletions immich/upload.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ import (
"io/fs"
"mime/multipart"
"net/http"
"net/textproto"
"path"
"strings"

Expand Down Expand Up @@ -50,7 +49,6 @@ func (ic *ImmichClient) uploadAsset(ctx context.Context, la *assets.Asset, endPo
if strings.TrimSuffix(la.OriginalFileName, ext) == "" {
la.OriginalFileName = "No Name" + ext // fix #88, #128
}

if strings.ToUpper(ext) == ".MP" {
ext = ".MP4" // #405
la.OriginalFileName = la.OriginalFileName + ".MP4"
Expand Down Expand Up @@ -94,7 +92,7 @@ func (ic *ImmichClient) uploadAsset(ctx context.Context, la *assets.Asset, endPo
return
}

if la.FromSideCar != nil && strings.ToLower(la.FromSideCar.File.Name()) == ".xmp" {
if la.FromSideCar != nil && strings.HasSuffix(strings.ToLower(la.FromSideCar.File.Name()), ".xmp") {
err = ic.writeSideCarPart(m, la)
if err != nil {
return
Expand Down Expand Up @@ -144,30 +142,19 @@ func (ic *ImmichClient) writeMultipartFields(m *multipart.Writer, callValues map
return nil
}

func (ic *ImmichClient) writeFilePart(m *multipart.Writer, f io.Reader, originalFileName, mtype string) error {
h := textproto.MIMEHeader{}
h.Set("Content-Disposition",
fmt.Sprintf(`form-data; name="%s"; filename="%s"`,
escapeQuotes("assetData"), escapeQuotes(path.Base(originalFileName))))
h.Set("Content-Type", mtype)

part, err := m.CreatePart(h)
func (ic *ImmichClient) writeFilePart(m *multipart.Writer, f io.Reader, originalFileName, _ string) error {
w, err := m.CreateFormFile("assetData", originalFileName)
if err != nil {
return err
}
_, err = io.Copy(part, f)
_, err = io.Copy(w, f)
return err
}

func (ic *ImmichClient) writeSideCarPart(m *multipart.Writer, la *assets.Asset) error {
scName := path.Base(la.OriginalFileName) + ".xmp"
h := textproto.MIMEHeader{}
h.Set("Content-Disposition",
fmt.Sprintf(`form-data; name="%s"; filename="%s"`,
escapeQuotes("sidecarData"), escapeQuotes(scName)))
h.Set("Content-Type", "application/xml")

part, err := m.CreatePart(h)
w, err := m.CreateFormFile("sidecarData", scName)
if err != nil {
return err
}
Expand All @@ -176,6 +163,6 @@ func (ic *ImmichClient) writeSideCarPart(m *multipart.Writer, la *assets.Asset)
return err
}
defer scf.Close()
_, err = io.Copy(part, scf)
_, err = io.Copy(w, scf)
return err
}

0 comments on commit 9f238df

Please sign in to comment.