Ejemplo n.º 1
0
        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()));
        }