feat(storage): 更新存储结构以使用新的存储提供者并优化文件上传和下载逻辑

This commit is contained in:
2025-12-30 18:07:58 +08:00
parent d87eac7d94
commit 3952d80d30
2 changed files with 32 additions and 15 deletions

View File

@@ -2,17 +2,17 @@ package jobs
import (
"context"
"fmt"
"os/exec"
"path/filepath"
"time"
"github.com/riverqueue/river"
log "github.com/sirupsen/logrus"
"quyun/v2/app/jobs/args"
"quyun/v2/database/models"
"quyun/v2/pkg/consts"
"quyun/v2/providers/storage"
"github.com/riverqueue/river"
log "github.com/sirupsen/logrus"
)
// @provider(job)
@@ -30,7 +30,9 @@ func (j *MediaProcessWorker) Work(ctx context.Context, job *river.Job[args.Media
}
// 2. Update status to processing
_, err = models.MediaAssetQuery.WithContext(ctx).Where(models.MediaAssetQuery.ID.Eq(asset.ID)).UpdateSimple(models.MediaAssetQuery.Status.Value(consts.MediaAssetStatusProcessing))
_, err = models.MediaAssetQuery.WithContext(ctx).
Where(models.MediaAssetQuery.ID.Eq(asset.ID)).
UpdateSimple(models.MediaAssetQuery.Status.Value(consts.MediaAssetStatusProcessing))
if err != nil {
return err
}
@@ -50,7 +52,18 @@ func (j *MediaProcessWorker) Work(ctx context.Context, job *river.Job[args.Media
coverFile := filepath.Join(outputDir, filepath.Base(coverKey))
// Generate Cover
cmd := exec.CommandContext(ctx, "ffmpeg", "-y", "-i", inputFile, "-ss", "00:00:01.000", "-vframes", "1", coverFile)
cmd := exec.CommandContext(
ctx,
"ffmpeg",
"-y",
"-i",
inputFile,
"-ss",
"00:00:01.000",
"-vframes",
"1",
coverFile,
)
if out, err := cmd.CombinedOutput(); err != nil {
log.Errorf("ffmpeg failed: %s, output: %s", err, string(out))
// Don't fail the job, just skip cover
@@ -64,9 +77,11 @@ func (j *MediaProcessWorker) Work(ctx context.Context, job *river.Job[args.Media
}
// 4. Update status to ready
_, err = models.MediaAssetQuery.WithContext(ctx).Where(models.MediaAssetQuery.ID.Eq(asset.ID)).Updates(&models.MediaAsset{
Status: consts.MediaAssetStatusReady,
UpdatedAt: time.Now(),
})
_, err = models.MediaAssetQuery.WithContext(ctx).
Where(models.MediaAssetQuery.ID.Eq(asset.ID)).
Updates(&models.MediaAsset{
Status: consts.MediaAssetStatusReady,
UpdatedAt: time.Now(),
})
return err
}