/// <summary>
 /// 当文件上传完成时调用此方法。
 /// </summary>
 public abstract void UploadFinished(UploadFinishedEventArgs e);
        private string DoCommand(Microsoft.AspNetCore.Http.HttpContext context)
#endif
        {
            var request  = context.Request;
            var response = context.Response;

            switch (this.GetUrlParameter(request, "cmd"))
            {
            case "fastupload":                                                                  //尝试秒传指定的文件。
            {
                string clientFileName  = this.GetUrlParameter(request, "filename");             //客户端文件名。
                long   fileSize        = long.Parse(this.GetUrlParameter(request, "filesize")); //文件大小。
                string sCheckCode      = this.GetUrlParameter(request, "checkcode");            //文件完整性校验码,如果设置了此项参数,则在文件上传完成时执行文件完整性校验。
                byte[] clientCheckCode = Thinksea.General.HexString2Bytes(sCheckCode);
                string customParameter = this.GetUrlParameter(request, "param");                //用户自定义参数。
                FastUploadEventArgs e  = new FastUploadEventArgs(clientFileName, clientCheckCode, customParameter);
                this.FastUpload(e);
                string JSON = System.Text.Json.JsonSerializer.Serialize(new Thinksea.Net.FileUploader.Result()
                    {
                        ErrorCode = 0,
                        Data      = e.ResultData,//将需要返回到客户端的数据写回客户端。
                    });
                return(JSON);
            }

            case "getoffset":                                                                   //客户端获取断点续传起始位置。
            {
                string clientFileName  = this.GetUrlParameter(request, "filename");             //客户端文件名。
                long   fileSize        = long.Parse(this.GetUrlParameter(request, "filesize")); //文件大小。
                string sCheckCode      = this.GetUrlParameter(request, "checkcode");            //文件完整性校验码,如果设置了此项参数,则在文件上传完成时执行文件完整性校验。
                byte[] clientCheckCode = Thinksea.General.HexString2Bytes(sCheckCode);
                string customParameter = this.GetUrlParameter(request, "param");                //用户自定义参数。
                string tempFile        = this.GetTempFile(clientCheckCode);                     //上传临时存盘文件名。
                long   p    = this.GetContinueUploadPosition(tempFile);
                string JSON = System.Text.Json.JsonSerializer.Serialize(new Thinksea.Net.FileUploader.Result()
                    {
                        ErrorCode = 0,
                        Data      = p,
                    });
                //response.Write(p);
                //_httpContext.Response.Clear();
                //_httpContext.Response.End();
                return(JSON);
            }

            default:     //上传文件内容。
            {
                #region 解析查询参数。
                string clientFileName  = this.GetUrlParameter(request, "filename");  //客户端文件名。
                string sFileSize       = this.GetUrlParameter(request, "filesize");  //文件大小。
                long   fileSize        = string.IsNullOrEmpty(sFileSize) ? 0 : long.Parse(sFileSize);
                string sCheckCode      = this.GetUrlParameter(request, "checkcode"); //文件完整性校验码,如果设置了此项参数,则在文件上传完成时执行文件完整性校验。
                byte[] clientCheckCode = string.IsNullOrEmpty(sCheckCode) ? null : Thinksea.General.HexString2Bytes(sCheckCode);
                string customParameter = this.GetUrlParameter(request, "param");     //用户自定义参数。
                string sOffset         = this.GetUrlParameter(request, "offset");    //上传数据起始偏移地址。
                long   startByte       = string.IsNullOrEmpty(sOffset) ? 0 : long.Parse(sOffset);
                #endregion

#if NETFRAMEWORK
                var uploadFiles = request.Files;
#elif NETCOREAPP
                if (!request.HasFormContentType)
                {
                    return(System.Text.Json.JsonSerializer.Serialize(new Thinksea.Net.FileUploader.Result()
                        {
                            ErrorCode = 1,
                            Message = "未上传文件内容。"
                        }));
                }
                var uploadFiles = request.Form.Files;
#endif
                if (uploadFiles.Count > 0)         //如果采用标准的网页表单格式上传文件数据。
                {
                    var httpPostedFile = uploadFiles[0];
                    if (string.IsNullOrEmpty(clientFileName))
                    {
                        clientFileName = httpPostedFile.FileName;
                    }
                    if (string.IsNullOrEmpty(sFileSize))
                    {
#if NETFRAMEWORK
                        fileSize = httpPostedFile.ContentLength;
#elif NETCOREAPP
                        fileSize = httpPostedFile.Length;
#endif
                    }
                }
                else
                {
                    return(System.Text.Json.JsonSerializer.Serialize(new Thinksea.Net.FileUploader.Result()
                        {
                            ErrorCode = 1,
                            Message = "未上传文件内容。"
                        }));
                }

                string tempFile = this.GetTempFile(clientCheckCode);         //上传临时存盘文件名。

                this.BeginUpload(new FileUploadEventArgs(tempFile, clientFileName, customParameter, startByte));

                //如果是第一次上传数据则删除同名文件。
                if (startByte == 0)
                {
#if DEBUG
                    System.Diagnostics.Debug.WriteLine("准备写入第一个数据块。");
#endif

                    //删除临时文件。
                    if (System.IO.File.Exists(tempFile))
                    {
                        System.IO.File.Delete(tempFile);
                    }
                }

#if DEBUG
                System.Diagnostics.Debug.WriteLine(string.Format("写数据到磁盘目录: {0}", this.FileUploadTempDirectory));
#endif

                bool   updateFinish               = false;
                byte[] serverCheckCode            = null;
                long   writeDataSize              = 0;
                System.IO.FileStream outputStream = System.IO.File.Open(tempFile, System.IO.FileMode.OpenOrCreate, System.IO.FileAccess.ReadWrite, System.IO.FileShare.None);        //System.IO.IOException
                try
                {
                    outputStream.Position = startByte;

#if NETFRAMEWORK
                    System.IO.Stream inputStream;
                    if (uploadFiles.Count > 0)         //如果采用标准的网页表单格式上传文件数据。
                    {
                        var httpPostedFile = uploadFiles[0];
                        inputStream = httpPostedFile.InputStream;
                    }
                    else         //如果非表单(即所有POST发送的内容原文既是文件数据)
                    {
                        inputStream = request.InputStream;
                    }
                    writeDataSize = this.SaveFile(inputStream, outputStream);
#elif NETCOREAPP
                    System.IO.Stream inputStream;
                    if (uploadFiles.Count > 0)         //如果采用标准的网页表单格式上传文件数据。
                    {
                        var httpPostedFile = uploadFiles[0];
                        using (inputStream = httpPostedFile.OpenReadStream())
                        {
                            writeDataSize = this.SaveFile(inputStream, outputStream);
                        }
                    }
                    else         //如果非表单(即所有POST发送的内容原文既是文件数据)
                    {
                        using (inputStream = request.Body)
                        {
                            writeDataSize = this.SaveFile(inputStream, outputStream);
                        }
                    }
#endif

#if DEBUG
                    System.Diagnostics.Debug.WriteLine("写数据到磁盘成功。");
#endif

                    if (outputStream.Position == fileSize)         //如果上传完成。
                    {
#if DEBUG
                        System.Diagnostics.Debug.WriteLine("写入最后一个数据块完成。");
#endif

                        #region 对比文件完整性校验码是否相同。
                        long p = outputStream.Position;
                        try
                        {
                            outputStream.Position = 0;
                            serverCheckCode       = this.GetCheckCode(outputStream);
                        }
                        finally
                        {
                            outputStream.Position = p;
                        }
                        if (clientCheckCode != null && !Thinksea.General.CompareArray(clientCheckCode, serverCheckCode))
                        {
                            outputStream.Close();
                            outputStream.Dispose();
                            outputStream = null;
                            if (System.IO.File.Exists(tempFile))
                            {
                                System.IO.File.Delete(tempFile);
                            }
                            throw new System.Exception("上传失败,未通过最后的文件校验过程。");
                        }
                        #endregion
                        updateFinish = true;
                    }
                    else
                    {
                        updateFinish = false;
                    }
                }
                finally
                {
                    if (outputStream != null)
                    {
                        outputStream.Close();
                        outputStream.Dispose();
                        outputStream = null;
                    }
                }

                string JSON;
                if (updateFinish)
                {
                    UploadFinishedEventArgs finishedFileUploadEventArgs = new UploadFinishedEventArgs(tempFile, clientFileName, serverCheckCode, customParameter);
                    this.UploadFinished(finishedFileUploadEventArgs);
                    //string targetFile = this.GetTargetFile(finishedFileUploadEventArgs.ClientFileName);
                    //if (finishedFileUploadEventArgs.ServerFile != targetFile)
                    //{
                    //    if (System.IO.File.Exists(targetFile))
                    //    {
                    //        System.IO.File.Delete(targetFile);
                    //    }
                    //    System.IO.File.Move(finishedFileUploadEventArgs.ServerFile, targetFile);//将临时文件名更改为目的文件名。
                    //}

                    //return finishedFileUploadEventArgs.ResultData;
                    JSON = System.Text.Json.JsonSerializer.Serialize(new Thinksea.Net.FileUploader.Result()
                        {
                            ErrorCode = 0,
                            Data      = finishedFileUploadEventArgs.ResultData,//将需要返回到客户端的数据写回客户端。
                        });
                }
                else
                {
                    JSON = System.Text.Json.JsonSerializer.Serialize(new Thinksea.Net.FileUploader.Result()
                        {
                            ErrorCode = 0,
                        });
                }
                return(JSON);
            }
            }
        }