diff --git a/backend/internal/controllers/download.go b/backend/internal/controllers/download.go index 40bb466..64a4bfb 100644 --- a/backend/internal/controllers/download.go +++ b/backend/internal/controllers/download.go @@ -42,14 +42,8 @@ func DownloadShare(c echo.Context) error { if err != nil { return err } - models.SetRedisShareInfo(claims.ShareId, models.RedisShareInfo{ - ViewNum: shareInfo.ViewNum - 1, - }) return cc.Attachment(fmt.Sprintf("%s/%s", uploadPath, utils.GetFileId(fileInfo.FileHash, fileInfo.FileSize)), shareInfo.FileName) } - models.SetRedisShareInfo(claims.ShareId, models.RedisShareInfo{ - ViewNum: shareInfo.ViewNum - 1, - }) return utils.HTTPSuccessHandler(c, map[string]any{ "data": shareInfo.Data, }) @@ -105,6 +99,17 @@ func VaildateShare(c echo.Context) error { if fileInfo.FileType != models.FileTypeUpload { return utils.HTTPErrorHandler(c, errors.New("分享文件状态错误")) } + } + // download_nums 必须放在创建token的时候减掉,不然多线程下载会导致多次减掉 + latestViewNum := shareInfo.ViewNum - 1 + // 如果下载次数为0,则设置为-1 防止空值问题 + if latestViewNum < 1 { + latestViewNum = -1 + } + models.SetRedisShareInfo(r.ShareId, models.RedisShareInfo{ + ViewNum: latestViewNum, + }) + if shareInfo.Type == models.ShareTypeFile { return utils.HTTPSuccessHandler(c, map[string]any{ "token": downloadToken, })