public IActionResult Merge() { var result = new ResultAdaptDto(); try { string guid = RequestHelper.GetQueryString("guid"); string fileName = RequestHelper.GetQueryString("fileName"); var tempDir = GlobalContext.WebRootPath + "/UploadTemp/" + guid; // 缓存文件夹 var targetDir = GlobalContext.WebRootPath + "/upfiles/videos/" + DateTime.Now.ToString("yyyyMMdd"); // 目标文件夹 //uploadfile,uploadvideo string action = RequestHelper.GetPostString("action"); if (action == "uploadfile") { targetDir = GlobalContext.WebRootPath + "/upfiles/attachments/" + DateTime.Now.ToString("yyyyMMdd"); // 目标文件夹 } if (!System.IO.Directory.Exists(targetDir)) { System.IO.Directory.CreateDirectory(targetDir); } int index = fileName.LastIndexOf('.'); string extName = fileName.Substring(index); string guidFileName = IdHelper.ObjectId() + extName; var finalPath = Path.Combine(targetDir, guidFileName); var files = System.IO.Directory.GetFiles(tempDir);//获得下面的所有文件 using (FileStream fs = System.IO.File.Create(finalPath)) { foreach (var part in files.OrderBy(x => x.Length).ThenBy(x => x))//排一下序,保证从0-N Write { var bytes = System.IO.File.ReadAllBytes(part); fs.Write(bytes, 0, bytes.Length); bytes = null; System.IO.File.Delete(part);//删除分块 } fs.Flush(); } string returnPath = "/upfiles/videos/" + DateTime.Now.ToString("yyyyMMdd") + "/" + guidFileName; if (action == "uploadfile") { returnPath = "/upfiles/attachments/" + DateTime.Now.ToString("yyyyMMdd") + "/" + guidFileName; } result.data.Add("url", returnPath); //文件合并完成后移除缓存 FileChunkCache.RemoveChunkId(guid); result.data.Add("fileName", fileName); } catch (Exception ex) { result.status = false; result.message = ex.Message; } return(Content(result.ToJson())); }
public IActionResult SaveChunkFile() { var result = new ResultAdaptDto(); //uploadfile,uploadvideo string action = RequestHelper.GetPostString("action"); string guid = RequestHelper.GetPostString("guid"); string fileName = RequestHelper.GetPostString("name"); string chunk = RequestHelper.GetPostString("chunk"); var tempDir = GlobalContext.WebRootPath + "/UploadTemp/" + guid; // 缓存文件夹 var targetDir = GlobalContext.WebRootPath + "/upfiles/videos/" + DateTime.Now.ToString("yyyyMMdd"); // 目标文件夹 if (action == "uploadfile") { targetDir = GlobalContext.WebRootPath + "/upfiles/attachments/" + DateTime.Now.ToString("yyyyMMdd"); // 目标文件夹 } if (!System.IO.Directory.Exists(targetDir)) { System.IO.Directory.CreateDirectory(targetDir); } var file = Request.Form.Files[0]; int index = fileName.LastIndexOf('.'); string extName = fileName.Substring(index); //单文件小于分片大小的直接保存下来 if (file.Length < THUNK_SIZE) { //判断是否是单文件 if (!FileChunkCache.ExistChunk(guid)) { string guidFileName = $"{IdHelper.ObjectId()}{extName}"; //这个hostingEnv.WebRootPath就是要存的地址可以改下 string newfilename = Path.Combine(targetDir, guidFileName); using (FileStream fs = System.IO.File.Create(newfilename)) { file.CopyTo(fs); fs.Flush(); } string returnPath = "/upfiles/videos/" + DateTime.Now.ToString("yyyyMMdd") + "/" + guidFileName; if (action == "uploadfile") { returnPath = "/upfiles/attachments/" + DateTime.Now.ToString("yyyyMMdd") + "/" + guidFileName; } result.status = true; result.statusCode = 200; result.data.Add("url", returnPath); result.data.Add("fileName", fileName); return(Content(result.ToJson())); } } //添加分片id缓存 FileChunkCache.AddChunkId(guid); //大于分片大小的直接保存下来 if (!System.IO.Directory.Exists(tempDir)) { System.IO.Directory.CreateDirectory(tempDir); } string filePath = tempDir + "/" + chunk.ToString() + extName; //file.SaveFile(filePath); using (FileStream fs = System.IO.File.Create(filePath)) { file.CopyTo(fs); fs.Flush(); } return(Content(result.ToJson())); }