/// <summary> /// 上传一个srt文件 /// </summary> /// <param name="userId"></param> /// <param name="fileName"></param> /// <param name="context"></param> /// <param name="ismerge">是否合并弹幕</param> /// <returns></returns> public SrtFile UploadSrtFile(int userId, string fileName, byte[] context, bool ismerge = true) { var saveFile = Path.Combine("upfiles/", userId + "_" + fileName); File.WriteAllBytes(saveFile, context); var fileBattuate = new SrtManager().LoadBattuteByFile(saveFile); // 因为本地文件的srt与原始的不一样了,这里要做一下转换 var jsonObj = new SrtJsonFile(); jsonObj.Battutas = ConverSrtToSubtitles(fileBattuate); jsonObj.FileName = fileName; jsonObj.Version = 1; var jsonSaveFile = Path.Combine("jsonfiles/", userId + "_" + fileName + ".json"); File.WriteAllText(jsonSaveFile, JsonConvert.SerializeObject(jsonObj, Formatting.Indented)); var srtItem = new SrtFile() { UserId = userId, LastUpdate = DateTime.Now, UploadTime = DateTime.Now, SourceLocalFileName = saveFile, SrtFileName = fileName, JsonSrtFileName = jsonSaveFile }; using (var db = DbSet.GetDb()) { db.Insert(srtItem); } return(srtItem); }
/// <summary> /// 上传一个vtt文件 /// </summary> /// <param name="userId"></param> /// <param name="fileName"></param> /// <param name="context"></param> /// <param name="ismerge">是否合并弹幕</param> /// <returns></returns> public SrtFile UploadVttFile(int userId, string fileName, byte[] context, bool ismerge = true) { var saveFile = Path.Combine("upfiles/", userId + "_" + fileName); File.WriteAllBytes(saveFile, context); // 加载vtt文件 var vtt = VTTHelper.GetVTTFromFile(saveFile); var jsonObj = new SrtJsonFile(); if (ismerge) { vtt = VvtRebuild.Rebuild(vtt); } jsonObj.Battutas = ConverVttToSubtitles(vtt.Lines); jsonObj.FileName = fileName; jsonObj.Version = 1; var jsonSaveFile = Path.Combine("jsonfiles/", userId + "_" + fileName + ".json"); File.WriteAllText(jsonSaveFile, JsonConvert.SerializeObject(jsonObj, Formatting.Indented)); var srtItem = new SrtFile() { UserId = userId, LastUpdate = DateTime.Now, UploadTime = DateTime.Now, SourceLocalFileName = saveFile, SrtFileName = fileName, JsonSrtFileName = jsonSaveFile }; using (var db = DbSet.GetDb()) { db.Insert(srtItem); } return(srtItem); }
/// <summary> /// 延迟保存文件内容 /// </summary> /// <param name="fileName"></param> /// <param name="content"></param> void DelaySaveFile(SrtFile srtFile, SrtJsonFile jsonObj) { lock (delaySaveFileMap) { delaySaveFileMap[srtFile.JsonSrtFileName] = jsonObj; } if (isSaveing) { return; } isSaveing = true; ThreadPool.QueueUserWorkItem(o => { // 延迟1分钟后统一做一次数据保存 Thread.Sleep(1000 * 60); // 你没看错,我就是这么牛,这么写延迟保存 try { lock (delaySaveFileMap) { foreach (var item in delaySaveFileMap) { File.WriteAllText(item.Key, JsonConvert.SerializeObject(item.Value)); Console.WriteLine($"save file:{item.Key}"); } delaySaveFileMap.Clear(); } } catch (Exception ex) { Console.WriteLine(ex); } isSaveing = false; }); }