public async Task <MessageEntity> FileMerge([FromBody] Dictionary <string, object> fileInfo)
        {
            MessageEntity message  = new MessageEntity();
            string        fileName = string.Empty;

            if (fileInfo.ContainsKey("name"))
            {
                fileName = fileInfo["name"].ToString();
            }
            if (string.IsNullOrEmpty(fileName))
            {
                message.Code = -1;
                message.Msg  = "文件名不能为空";
                return(message);
            }

            //最终上传完成后,请求合并返回合并消息
            try
            {
                RequestFileUploadEntity requestFile = _cache.Get(fileName) as RequestFileUploadEntity;
                if (requestFile == null)
                {
                    message.Code = -1;
                    message.Msg  = "合并失败";
                    return(message);
                }
                string filePath     = $".{Appsettings.app(new string[] { "TestFileHandle", "FilePath" })}{DateTime.Now.ToString("yyyy-MM-dd")}/{fileName}";
                string fileExt      = requestFile.fileext;
                string fileMd5      = requestFile.filedata;
                int    fileCount    = requestFile.count;
                long   fileSize     = requestFile.size;
                string fileTestname = requestFile.filename;

                //LogUtil.Debug($"获取文件路径:{filePath}");
                //LogUtil.Debug($"获取文件类型:{fileExt}");

                string savePath      = filePath.Replace(fileName, "");
                string saveFileName  = $"{fileTestname}";
                var    files         = Directory.GetFiles(filePath);
                string fileFinalName = Path.Combine(savePath, saveFileName);
                //LogUtil.Debug($"获取文件最终路径:{fileFinalName}");
                FileStream fs = new FileStream(fileFinalName, FileMode.Create);
                //LogUtil.Debug($"目录文件下文件总数:{files.Length}");

                //LogUtil.Debug($"目录文件排序前:{string.Join(",", files.ToArray())}");
                //LogUtil.Debug($"目录文件排序后:{string.Join(",", files.OrderBy(x => x.Length).ThenBy(x => x))}");
                byte[] finalBytes = new byte[fileSize];
                foreach (var part in files.OrderBy(x => x.Length).ThenBy(x => x))
                {
                    var bytes = System.IO.File.ReadAllBytes(part);

                    await fs.WriteAsync(bytes, 0, bytes.Length);

                    bytes = null;
                    System.IO.File.Delete(part);//删除分块
                }
                fs.Close();
                //这个地方会引发文件被占用异常
                fs = new FileStream(fileFinalName, FileMode.Open);
                string strMd5 = GetCryptoString(fs);
                //LogUtil.Debug($"文件数据MD5:{strMd5}");
                //LogUtil.Debug($"文件上传数据:{JsonConvert.SerializeObject(requestFile)}");
                fs.Close();
                Directory.Delete(filePath);
                //如果MD5与原MD5不匹配,提示重新上传
                if (strMd5 != requestFile.filedata)
                {
                    //LogUtil.Debug($"上传文件md5:{requestFile.filedata},服务器保存文件md5:{strMd5}");
                    message.Code = -1;
                    message.Msg  = "MD5值不匹配";
                    return(message);
                }

                _cache.Remove(fileInfo["name"].ToString());
                message.Code = 0;
                message.Msg  = "";
            }
            catch (Exception ex)
            {
                //LogUtil.Error($"合并文件失败,文件名称:{fileName},错误信息:{ex.Message}");
                message.Code = -1;
                message.Msg  = "合并文件失败,请重新上传";
            }
            return(message);
        }
Exemplo n.º 2
0
 public ActionResult <BaseResponse> Logout()
 {
     _caching.Remove(CacheKey.Token(GetUserId().ToString()));
     return(BaseResponse.GetBaseResponse(ResponseStatusType.Success));
 }