diff --git a/CloudBuilder.Topshelf/Lib/CloudBuilder.Core.dll b/CloudBuilder.Topshelf/Lib/CloudBuilder.Core.dll index 7ce9ade..3c674f2 100644 Binary files a/CloudBuilder.Topshelf/Lib/CloudBuilder.Core.dll and b/CloudBuilder.Topshelf/Lib/CloudBuilder.Core.dll differ diff --git a/CloudBuilder.Topshelf/Lib/CloudBuilder.Master.Service.dll b/CloudBuilder.Topshelf/Lib/CloudBuilder.Master.Service.dll index 438bd02..8f17e4a 100644 Binary files a/CloudBuilder.Topshelf/Lib/CloudBuilder.Master.Service.dll and b/CloudBuilder.Topshelf/Lib/CloudBuilder.Master.Service.dll differ diff --git a/CloudBuilder.Topshelf/Lib/CloudBuilder.Master.dll b/CloudBuilder.Topshelf/Lib/CloudBuilder.Master.dll index c420bed..3c10777 100644 Binary files a/CloudBuilder.Topshelf/Lib/CloudBuilder.Master.dll and b/CloudBuilder.Topshelf/Lib/CloudBuilder.Master.dll differ diff --git a/CloudBuilder.Topshelf/Lib/CloudBuilder.Security.Service.dll b/CloudBuilder.Topshelf/Lib/CloudBuilder.Security.Service.dll index e5eedaa..151ad8c 100644 Binary files a/CloudBuilder.Topshelf/Lib/CloudBuilder.Security.Service.dll and b/CloudBuilder.Topshelf/Lib/CloudBuilder.Security.Service.dll differ diff --git a/CloudBuilder.Topshelf/Lib/CloudBuilder.Security.dll b/CloudBuilder.Topshelf/Lib/CloudBuilder.Security.dll index 8d4565b..cd67eeb 100644 Binary files a/CloudBuilder.Topshelf/Lib/CloudBuilder.Security.dll and b/CloudBuilder.Topshelf/Lib/CloudBuilder.Security.dll differ diff --git a/CloudBuilder.Topshelf/Program.cs b/CloudBuilder.Topshelf/Program.cs index 199d0bd..782a5e3 100644 --- a/CloudBuilder.Topshelf/Program.cs +++ b/CloudBuilder.Topshelf/Program.cs @@ -34,8 +34,6 @@ public partial class Program string taskName = null; Dictionary bodyDict = new Dictionary(); - File.AppendAllText("log.txt", "Main:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "\r\n"); - if (args != null && args.Length > 0) { var services = new ServiceCollection(); diff --git a/CloudBuilder.Topshelf/Properties/PublishProfiles/FolderProfile.pubxml.user b/CloudBuilder.Topshelf/Properties/PublishProfiles/FolderProfile.pubxml.user index 4ebdf5b..25c9d8b 100644 --- a/CloudBuilder.Topshelf/Properties/PublishProfiles/FolderProfile.pubxml.user +++ b/CloudBuilder.Topshelf/Properties/PublishProfiles/FolderProfile.pubxml.user @@ -2,7 +2,7 @@ - True|2026-09-21T07:29:51.3588778Z||;True|2026-09-21T15:18:10.5399306+08:00||;True|2026-09-21T14:59:51.6908938+08:00||;True|2026-09-21T14:49:11.2390264+08:00||;True|2026-09-21T14:17:57.4013084+08:00||;True|2026-09-21T14:00:14.9207890+08:00||;True|2026-09-21T11:59:35.1020536+08:00||;True|2026-09-21T11:50:47.8944224+08:00||;True|2026-09-21T11:30:52.9019631+08:00||;True|2026-09-21T10:47:01.8026331+08:00||; + True|2026-09-21T13:16:57.9976233Z||;True|2026-09-21T19:43:49.4288081+08:00||;True|2026-09-21T18:49:13.4734866+08:00||;True|2026-09-21T18:10:56.1357602+08:00||;True|2026-09-21T17:47:00.1779419+08:00||;True|2026-09-21T15:29:51.3588778+08:00||;True|2026-09-21T15:18:10.5399306+08:00||;True|2026-09-21T14:59:51.6908938+08:00||;True|2026-09-21T14:49:11.2390264+08:00||;True|2026-09-21T14:17:57.4013084+08:00||;True|2026-09-21T14:00:14.9207890+08:00||;True|2026-09-21T11:59:35.1020536+08:00||;True|2026-09-21T11:50:47.8944224+08:00||;True|2026-09-21T11:30:52.9019631+08:00||;True|2026-09-21T10:47:01.8026331+08:00||; \ No newline at end of file diff --git a/CloudBuilder.Topshelf/Task/RunTask.cs b/CloudBuilder.Topshelf/Task/RunTask.cs index e6b21a5..a019e36 100644 --- a/CloudBuilder.Topshelf/Task/RunTask.cs +++ b/CloudBuilder.Topshelf/Task/RunTask.cs @@ -31,20 +31,24 @@ namespace CloudBuilder.Topshelf.Task IRepository taskRepository = service.GetRepository>(); - SecurityScheduleTaskQueueEntity task = taskRepository.DetachedEntities.OrderBy(x => x.QueueId).FirstOrDefault(); + SecurityScheduleTaskQueueEntity[] tasks = taskRepository.DetachedEntities.OrderBy(x => x.QueueId).ToArray(); - if (task == null) return; + if (tasks == null || tasks.Length == 0) return; + foreach (var task in tasks) + { + IRepository repositoryDmsFile = service.GetRepository>(); + DmsFileEntity dmsFile = repositoryDmsFile.DetachedEntities.Where(x => x.OrderKey == task.DocumentId).FirstOrDefault(); - IRepository repositoryDmsFile = service.GetRepository>(); - DmsFileEntity dmsFile = repositoryDmsFile.DetachedEntities.Where(x => x.OrderKey == task.DocumentId).FirstOrDefault(); + if (dmsFile == null) return; - if (dmsFile == null) return; + RunMyProcess(task.TaskId, task.TaskParam); - RunMyProcess(task.TaskId, task.TaskParam); + dmsFile.TranscodeIndc = YesNoPolicy.YES; + repositoryDmsFile.UpdateNow(dmsFile); - dmsFile.TranscodeIndc = YesNoPolicy.YES; - repositoryDmsFile.UpdateNow(dmsFile); + taskRepository.DeleteNow(task); + } } catch (Exception ex) { @@ -60,7 +64,11 @@ namespace CloudBuilder.Topshelf.Task { try { - parameters = parameters.Replace("/app/data", "/vol1/1000/Docker/NET8/DEV/data"); + //Dockerfile中定义的volumes的映射地址 + var rf = service.Configuration["FileServiceSettings:RelativeFileDirectory"]; + var af = service.Configuration["FileServiceSettings:AbsoluteFileDirectory"]; + + parameters = parameters.Replace(rf, af); log.WriteToFile(exePath + parameters); diff --git a/CloudBuilder.Topshelf/appsettings.json b/CloudBuilder.Topshelf/appsettings.json index ccfba76..751c573 100644 --- a/CloudBuilder.Topshelf/appsettings.json +++ b/CloudBuilder.Topshelf/appsettings.json @@ -8,7 +8,7 @@ "DbContexts": { "MasterDbContext": { "DbContextTypeName": "MasterDbContext", - "ConnectionString": "server=nas.youjiala.com;port=3307;database=builder;uid=root;pwd=Root@1237890;CharSet=utf8mb4;", + "ConnectionString": "server=nas.youjiala.com;port=3307;database=Furion;uid=root;pwd=Root@1237890;CharSet=utf8mb4;", "DatabaseType": "MySql", "LazyLoadingProxiesEnabled": true, "AuditEntityEnabled": true, @@ -26,6 +26,10 @@ "UserMobile": "13560851330" } }, + "FileServiceSettings": { + "AbsoluteFileDirectory": "/vol1/1000/Docker/NET8/publish/data", + "RelativeFileDirectory": "/app/data" //Dockerfile - /vol1/1000/Docker/NET8/publish/data:/app/data + }, "IApplicationService": { "UserId": "000003" //通过Service是不需要用户权限而直接调用 }, diff --git a/CloudBuilder/CloudBuilder.Master.Service/DmsFileService.auto.cs b/CloudBuilder/CloudBuilder.Master.Service/DmsFileService.auto.cs index 084c0f8..a0623b0 100644 --- a/CloudBuilder/CloudBuilder.Master.Service/DmsFileService.auto.cs +++ b/CloudBuilder/CloudBuilder.Master.Service/DmsFileService.auto.cs @@ -1404,7 +1404,7 @@ namespace CloudBuilder.Master.Service return para.ToArray().ToDelimiteredList(' '); } - public void TsToM3u8(string documentId, string mp4Url, string m3u8Url, int videoLength = 6) + public void TsToM3u8(string documentId, string mp4Url, string m3u8Url) { string para = string.Format(service.Configuration[ServiceSettingsPolicy.FfmpegPictrue], mp4Url, m3u8Url); try @@ -1431,7 +1431,7 @@ namespace CloudBuilder.Master.Service } //return; - para = string.Format(service.Configuration["Ffmpeg:Arguments"], mp4Url, videoLength, fullName); + para = string.Format(service.Configuration["Ffmpeg:Arguments"], mp4Url, fullName); //不直接转码视频文件,影响服务器性能,改为在闭时自动生成 //Task.Run(() => //{ @@ -1513,16 +1513,30 @@ namespace CloudBuilder.Master.Service { log.WriteToFile(exePath + Parameters); if (string.IsNullOrEmpty(exePath)) return; - Cli.Wrap(exePath) - .WithArguments(Parameters) - .ExecuteAsync(); + + // 必须等 ffmpeg 真正退出:视频封面(jpg)要在接口返回前落盘, + // 否则前端刷新列表时文件还没生成, 请求 404 且不会自动重试, + // 表现为"上传完看不到封面,手动刷新才有"。 + // 最多等 15 秒,超时就交给前端的封面重试机制兜底,不再死等拖住上传请求。 + // CliWrap 的 ExecuteAsync 返回 CommandTask,取它的 Task 才能等待 + var task = Cli.Wrap(exePath) + .WithArguments(Parameters) + .ExecuteAsync() + .Task; + + if (!task.Wait(TimeSpan.FromSeconds(15))) + { + log.WriteToFile("ffmpeg 执行超时(15s):" + Parameters); + return; + } + + log.WriteToFile("ffmpeg 执行完成,ExitCode:" + task.Result.ExitCode); } catch (Exception ex) { + // 截图失败不影响上传本身,这里只记日志,封面由前端重试兜底 log.WriteToFile(ex.Message); - throw new ValidatedException(ex.Message); } - } public DmsFileEntity CreateDmsFile(DmsFileEntity dmsFile) diff --git a/CloudBuilder/CloudBuilder.Master.Service/PublishVideoService.auto.cs b/CloudBuilder/CloudBuilder.Master.Service/PublishVideoService.auto.cs index 80797b3..7b5c2ea 100644 --- a/CloudBuilder/CloudBuilder.Master.Service/PublishVideoService.auto.cs +++ b/CloudBuilder/CloudBuilder.Master.Service/PublishVideoService.auto.cs @@ -89,9 +89,9 @@ namespace CloudBuilder.Master.Service var upload = ServiceSettingsPolicy.GetDmsFileUploadDirectory(service).Replace(phy, ""); //暂时不支持转码 - //DmsFileEntity dmsFileEntity = repositoryDmsFile.DetachedEntities.Where(x => x.OrderKey == item.Url).FirstOrDefault(); + DmsFileEntity dmsFileEntity = repositoryDmsFile.DetachedEntities.Where(x => x.OrderKey == item.Url).FirstOrDefault(); item.FormattedPic = FileTypePolicy.PackPicUrl(service, item.CreatedBy, item.Url); - item.FormattedUrl = FileTypePolicy.PackUrl(service, item.CreatedBy, item.Url, YesNoPolicy.NO); + item.FormattedUrl = FileTypePolicy.PackUrl(service, item.CreatedBy, item.Url, dmsFileEntity.TranscodeIndc); } } } diff --git a/CloudBuilder/CloudBuilder.Security/Policy/FileTypePolicy.cs b/CloudBuilder/CloudBuilder.Security/Policy/FileTypePolicy.cs index 7f01502..43a2a03 100644 --- a/CloudBuilder/CloudBuilder.Security/Policy/FileTypePolicy.cs +++ b/CloudBuilder/CloudBuilder.Security/Policy/FileTypePolicy.cs @@ -129,7 +129,8 @@ namespace CloudBuilder.Security.Policy var upload = (ServiceSettingsPolicy.GetDmsFileBackupDirectory(service) ?? "").Replace(phy ?? "", ""); var filePathRel = Path.Combine(upload, createdBy, fileExtension.Replace(".", ""), ""); var filePath = filePathRel.Replace(Path.DirectorySeparatorChar, '/') + "/"; - url = service.Configuration[AppsettingsPolicy.ApplicationUrl] + webRootPath + filePath + Path.GetFileNameWithoutExtension(orderKey) + JPG + "?v=" + DateTime.Now.ToString("yyyyMMddhhmmss"); + // HH 才是 24 小时制:写成 hh 会让上午/下午的时间重复,缓存穿透失效 + url = service.Configuration[AppsettingsPolicy.ApplicationUrl] + webRootPath + filePath + Path.GetFileNameWithoutExtension(orderKey) + JPG + "?v=" + DateTime.Now.ToString("yyyyMMddHHmmss"); } else { diff --git a/CloudBuilder/CloudBuilder.Web.Entry/Properties/PublishProfiles/FolderProfile3.pubxml.user b/CloudBuilder/CloudBuilder.Web.Entry/Properties/PublishProfiles/FolderProfile3.pubxml.user index 8d98e46..e7eedb3 100644 --- a/CloudBuilder/CloudBuilder.Web.Entry/Properties/PublishProfiles/FolderProfile3.pubxml.user +++ b/CloudBuilder/CloudBuilder.Web.Entry/Properties/PublishProfiles/FolderProfile3.pubxml.user @@ -3,7 +3,7 @@ <_PublishTargetUrl>C:\inetpub\wwwroot\dockwebapi2 - True|2026-09-21T08:51:19.8137872Z||;True|2026-09-21T16:30:01.0950896+08:00||;True|2026-09-21T15:09:00.2326737+08:00||;True|2026-09-21T14:47:09.6120256+08:00||;True|2026-09-21T14:16:35.3194409+08:00||;True|2026-09-21T13:54:58.2829712+08:00||;True|2026-09-21T13:36:45.3134499+08:00||;True|2026-09-19T09:48:52.0085130+08:00||;False|2026-09-19T09:47:56.1658214+08:00||;True|2026-09-17T18:50:15.9493380+08:00||;True|2026-09-17T18:11:11.5364547+08:00||;True|2026-09-17T18:07:27.7830758+08:00||;True|2026-09-17T17:58:16.5798560+08:00||;True|2026-09-17T15:37:30.9025614+08:00||;True|2026-09-17T15:25:46.9116292+08:00||;True|2026-09-17T15:05:18.6592403+08:00||;True|2026-09-17T14:57:28.7997437+08:00||;True|2026-09-17T14:36:00.6339386+08:00||;True|2026-09-17T13:56:43.2376873+08:00||;True|2026-09-16T13:56:51.8724546+08:00||;True|2026-09-15T20:44:46.6559899+08:00||;True|2026-09-13T19:02:59.5654245+08:00||;True|2026-09-10T09:14:56.2914193+08:00||;True|2026-09-09T16:40:16.6461154+08:00||;True|2026-09-08T13:55:23.1502435+08:00||;True|2026-09-08T08:04:53.4279263+08:00||;True|2026-09-07T08:48:17.4682304+08:00||;True|2026-09-04T14:39:08.7878670+08:00||;True|2026-09-04T14:35:48.2937877+08:00||;True|2026-09-04T11:45:16.1372876+08:00||;True|2026-09-04T11:42:59.9356436+08:00||;True|2026-09-03T16:05:52.5270232+08:00||;True|2026-09-03T14:52:56.8559144+08:00||;True|2026-09-02T11:08:23.8720038+08:00||;True|2026-09-02T10:58:16.8081797+08:00||;True|2026-08-26T13:34:12.3805892+08:00||;True|2026-08-25T08:31:30.7787234+08:00||;True|2026-08-20T13:10:46.4725468+08:00||;True|2026-08-20T13:10:28.3142576+08:00||;True|2026-08-19T16:10:27.3362887+08:00||;True|2026-08-19T16:01:12.6234971+08:00||;True|2026-08-19T15:42:46.6576265+08:00||;True|2026-08-19T13:39:59.9363522+08:00||;True|2026-08-19T13:36:53.0379313+08:00||;True|2026-08-19T13:31:36.0841398+08:00||;True|2026-08-19T11:44:37.5319626+08:00||;True|2026-08-19T09:36:45.6000047+08:00||;True|2026-08-19T09:34:36.8468631+08:00||;True|2026-08-19T08:35:41.2202300+08:00||;True|2026-08-18T16:20:59.0170916+08:00||; + True|2026-09-21T13:01:22.8888913Z||;True|2026-09-21T19:15:03.4753747+08:00||;True|2026-09-21T18:08:30.0866986+08:00||;True|2026-09-21T16:51:19.8137872+08:00||;True|2026-09-21T16:30:01.0950896+08:00||;True|2026-09-21T15:09:00.2326737+08:00||;True|2026-09-21T14:47:09.6120256+08:00||;True|2026-09-21T14:16:35.3194409+08:00||;True|2026-09-21T13:54:58.2829712+08:00||;True|2026-09-21T13:36:45.3134499+08:00||;True|2026-09-19T09:48:52.0085130+08:00||;False|2026-09-19T09:47:56.1658214+08:00||;True|2026-09-17T18:50:15.9493380+08:00||;True|2026-09-17T18:11:11.5364547+08:00||;True|2026-09-17T18:07:27.7830758+08:00||;True|2026-09-17T17:58:16.5798560+08:00||;True|2026-09-17T15:37:30.9025614+08:00||;True|2026-09-17T15:25:46.9116292+08:00||;True|2026-09-17T15:05:18.6592403+08:00||;True|2026-09-17T14:57:28.7997437+08:00||;True|2026-09-17T14:36:00.6339386+08:00||;True|2026-09-17T13:56:43.2376873+08:00||;True|2026-09-16T13:56:51.8724546+08:00||;True|2026-09-15T20:44:46.6559899+08:00||;True|2026-09-13T19:02:59.5654245+08:00||;True|2026-09-10T09:14:56.2914193+08:00||;True|2026-09-09T16:40:16.6461154+08:00||;True|2026-09-08T13:55:23.1502435+08:00||;True|2026-09-08T08:04:53.4279263+08:00||;True|2026-09-07T08:48:17.4682304+08:00||;True|2026-09-04T14:39:08.7878670+08:00||;True|2026-09-04T14:35:48.2937877+08:00||;True|2026-09-04T11:45:16.1372876+08:00||;True|2026-09-04T11:42:59.9356436+08:00||;True|2026-09-03T16:05:52.5270232+08:00||;True|2026-09-03T14:52:56.8559144+08:00||;True|2026-09-02T11:08:23.8720038+08:00||;True|2026-09-02T10:58:16.8081797+08:00||;True|2026-08-26T13:34:12.3805892+08:00||;True|2026-08-25T08:31:30.7787234+08:00||;True|2026-08-20T13:10:46.4725468+08:00||;True|2026-08-20T13:10:28.3142576+08:00||;True|2026-08-19T16:10:27.3362887+08:00||;True|2026-08-19T16:01:12.6234971+08:00||;True|2026-08-19T15:42:46.6576265+08:00||;True|2026-08-19T13:39:59.9363522+08:00||;True|2026-08-19T13:36:53.0379313+08:00||;True|2026-08-19T13:31:36.0841398+08:00||;True|2026-08-19T11:44:37.5319626+08:00||;True|2026-08-19T09:36:45.6000047+08:00||;True|2026-08-19T09:34:36.8468631+08:00||;True|2026-08-19T08:35:41.2202300+08:00||;True|2026-08-18T16:20:59.0170916+08:00||; \ No newline at end of file diff --git a/CloudBuilder/CloudBuilder.Web.Entry/appsettings.json b/CloudBuilder/CloudBuilder.Web.Entry/appsettings.json index 7ca6e07..35aee63 100644 --- a/CloudBuilder/CloudBuilder.Web.Entry/appsettings.json +++ b/CloudBuilder/CloudBuilder.Web.Entry/appsettings.json @@ -10,7 +10,7 @@ "DbContexts": { "MasterDbContext": { "DbContextTypeName": "MasterDbContext", - "ConnectionString": "server=nas.youjiala.com;port=3307;database=Furion;uid=root;pwd=Root@1237890;CharSet=utf8mb4;", + "ConnectionString": "server=nas.youjiala.com;port=3307;database=builder;uid=root;pwd=Root@1237890;CharSet=utf8mb4;", "DatabaseType": "MySql", "LazyLoadingProxiesEnabled": true, "AuditEntityEnabled": true, @@ -68,8 +68,8 @@ }, "Ffmpeg": { "Path": "D:\\NET8\\Exe\\ffmpeg\\bin\\ffmpeg.exe", //视频转码 - "Pictrue": " -i {0} -ss 00:00:2.000 -frames:v 1 -vf \"scale=1280:-1\" -q:v 4 {1}", //" -i {0} -ss 00:00:2.000 -frames:v 1 {1}", - "Arguments": " -i {0} -c:v libx264 -vf scale=1280:-1 -start_number 0 -hls_time {1} -hls_list_size 0 -f hls {2}" //0-源路径,1-目标路径,2-存放多少秒 1280×720,852*480 + "Pictrue": " -i {0} -ss 00:00:2.000 -frames:v 1 -vf \"scale=1280:-2\" -q:v 4 {1}", //" -i {0} -ss 00:00:2.000 -frames:v 1 {1}", + "Arguments": "-i {0} -c:v libx264 -preset veryfast -crf 26 -profile:v main -level 3.1 -vf \"scale='min(1280,iw)':-2\" -maxrate 1500k -bufsize 2400k -c:a aac -b:a 96k -ac 2 -ar 44100 -start_number 0 -hls_time 3 -hls_list_size 0 -hls_flags independent_segments -f hls {1}" //0-源路径,1-目标路径 }, "CloudBuilder.Topshelf": { "Path": "D:\\MAFAI\\CloudBuilder.Topshelf\\bin\\Debug\\net8.0\\CloudBuilder.Topshelf.exe" //图片压缩 diff --git a/WebVue/package-lock.json b/WebVue/package-lock.json index 221aecc..11cf6c1 100644 --- a/WebVue/package-lock.json +++ b/WebVue/package-lock.json @@ -25,6 +25,7 @@ "cors": "^2.8.5", "crypto-js": "^4.2.0", "gsap": "^3.12.5", + "hls.js": "^1.7.3", "howler": "^2.2.4", "html2canvas": "^1.4.1", "jsencrypt": "^3.3.2", @@ -38,7 +39,6 @@ "vue-request": "^2.0.4", "vue-router": "^4.0.13", "vue3-photo-preview": "^0.3.0", - "vue3-video-play": "^1.3.1", "wow.js": "^1.2.2" }, "devDependencies": { @@ -2899,9 +2899,10 @@ } }, "node_modules/hls.js": { - "version": "1.5.8", - "resolved": "https://registry.npmmirror.com/hls.js/-/hls.js-1.5.8.tgz", - "integrity": "sha512-hJYMPfLhWO7/7+n4f9pn6bOheCGx0WgvVz7k3ouq3Pp1bja48NN+HeCQu3XCGYzqWQF/wo7Sk6dJAyWVJD8ECA==" + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/hls.js/-/hls.js-1.7.3.tgz", + "integrity": "sha512-MsPlx6yVW4Qv4C7mEVou4/gk/5cN2dVxOTnrNjPSmyH2f0Ln+/UkG10Ax1PE6OvrmTVPKgQYozTtBaPOuCzq7A==", + "license": "Apache-2.0" }, "node_modules/howler": { "version": "2.2.4", @@ -3772,24 +3773,6 @@ "vue": ">=3.2.0" } }, - "node_modules/vue3-video-play": { - "version": "1.3.1", - "resolved": "https://registry.npmmirror.com/vue3-video-play/-/vue3-video-play-1.3.1.tgz", - "integrity": "sha512-krx3wC3TGB6CHgNEEC3cDsq3UwUQhMW9FU4ryZtgDpMctjIMs275cQe3wrXTVDRIk3IVcHJ5HV4UlaHX2DKTFw==", - "dependencies": { - "hls.js": "^1.0.10", - "throttle-debounce": "^3.0.1", - "vue": "^3.2.2" - } - }, - "node_modules/vue3-video-play/node_modules/throttle-debounce": { - "version": "3.0.1", - "resolved": "https://registry.npmmirror.com/throttle-debounce/-/throttle-debounce-3.0.1.tgz", - "integrity": "sha512-dTEWWNu6JmeVXY0ZYoPuH5cRIwc0MeGbJwah9KUNYSJwommQpCzTySTpEe8Gs1J23aeWEuAobe4Ag7EHVt/LOg==", - "engines": { - "node": ">=10" - } - }, "node_modules/warning": { "version": "4.0.3", "resolved": "https://registry.npmmirror.com/warning/-/warning-4.0.3.tgz", diff --git a/WebVue/package.json b/WebVue/package.json index 4565f69..e10d392 100644 --- a/WebVue/package.json +++ b/WebVue/package.json @@ -26,6 +26,7 @@ "cors": "^2.8.5", "crypto-js": "^4.2.0", "gsap": "^3.12.5", + "hls.js": "^1.7.3", "howler": "^2.2.4", "html2canvas": "^1.4.1", "jsencrypt": "^3.3.2", @@ -39,7 +40,6 @@ "vue-request": "^2.0.4", "vue-router": "^4.0.13", "vue3-photo-preview": "^0.3.0", - "vue3-video-play": "^1.3.1", "wow.js": "^1.2.2" }, "devDependencies": { diff --git a/WebVue/src/components/basic/FileUpload.vue b/WebVue/src/components/basic/FileUpload.vue index fc3d867..7859fdf 100644 --- a/WebVue/src/components/basic/FileUpload.vue +++ b/WebVue/src/components/basic/FileUpload.vue @@ -219,7 +219,7 @@ const requestChunk = async ( percent: percentBefore, current: index, total: chunks.length, - text: `网络异常,正在重试(${attempt + 1}/${retries})...`, + text: `网络异常,正在重试(${attempt + 1}/${retries})... ${percentBefore}%`, }); await sleep(props.retryDelay * Math.pow(2, attempt)); } @@ -262,10 +262,11 @@ const uploadChunk = async ( percent, current: index, total: chunks.length, + // 单文件、多文件都统一用百分比(按字节算的整体进度),不再显示「第几片/共几片」 text: progress.fileCount > 1 - ? `上传中(第 ${progress.fileNo}/${progress.fileCount} 个,分片 ${index}/${chunks.length}) ${percent}%` - : `上传中(${index}/${chunks.length})...`, + ? `上传中(第 ${progress.fileNo}/${progress.fileCount} 个) ${percent}%` + : `上传中 ${percent}%`, }); if (index < chunks.length) { diff --git a/WebVue/src/components/basic/MyComputer.vue b/WebVue/src/components/basic/MyComputer.vue index 25feccf..985a8b1 100644 --- a/WebVue/src/components/basic/MyComputer.vue +++ b/WebVue/src/components/basic/MyComputer.vue @@ -39,7 +39,7 @@ - - \ No newline at end of file diff --git a/WebVue/src/vite-env.d.ts b/WebVue/src/vite-env.d.ts index 03be237..f97ea2e 100644 --- a/WebVue/src/vite-env.d.ts +++ b/WebVue/src/vite-env.d.ts @@ -1,4 +1,3 @@ /// -declare module "vue3-video-play"; declare module "@worstone/vue-aplayer"; declare module "wow.js";