diff --git a/assets/js/controllers/upload.js b/assets/js/controllers/upload.js index 234ff6f..3b3b792 100644 --- a/assets/js/controllers/upload.js +++ b/assets/js/controllers/upload.js @@ -15,6 +15,7 @@ export default class UploadController extends Controller { ev.preventDefault(); this._promptForUpload((files) => { + files.sort((a, b) => b.lastModified - a.lastModified); this._doUploads(files); }) } diff --git a/services/uploads/pending.go b/services/uploads/pending.go index eaa5efb..2c2c6a9 100644 --- a/services/uploads/pending.go +++ b/services/uploads/pending.go @@ -98,7 +98,8 @@ func (s *Service) FinalizePending(ctx context.Context, pendingGUID string, expec } pendingDataFilename := filepath.Join(s.pendingDir, pu.GUID+".upload") - if err := s.verifyPendingUpload(pendingDataFilename, expectedHash); err != nil { + fileSize, err := s.verifyPendingUpload(pendingDataFilename, expectedHash) + if err != nil { return err } @@ -113,7 +114,7 @@ func (s *Service) FinalizePending(ctx context.Context, pendingGUID string, expec newUpload := models.Upload{ SiteID: site.ID, GUID: models.NewNanoID(), - FileSize: pu.FileSize, + FileSize: fileSize, MIMEType: pu.MIMEType, Filename: pu.Filename, CreatedAt: newTime, @@ -136,30 +137,31 @@ func (s *Service) FinalizePending(ctx context.Context, pendingGUID string, expec return nil } -func (s *Service) verifyPendingUpload(pendingDataFilename string, expectedHash string) error { +func (s *Service) verifyPendingUpload(pendingDataFilename string, expectedHash string) (fileSize int64, _ error) { expectedHashBytes, err := hex.DecodeString(expectedHash) if err != nil { - return err + return 0, err } - if _, err := os.Stat(pendingDataFilename); err != nil { - return err + stats, err := os.Stat(pendingDataFilename) + if err != nil { + return 0, err } pendingDataFile, err := os.Open(pendingDataFilename) if err != nil { - return err + return 0, err } defer pendingDataFile.Close() shaSum := sha256.New() if _, err := io.Copy(shaSum, pendingDataFile); err != nil { - return err + return 0, err } if !bytes.Equal(shaSum.Sum(nil), expectedHashBytes) { - return errors.New("hash mismatch") + return 0, errors.New("hash mismatch") } - return nil + return stats.Size(), nil }