Exemple #1
0
        /// <summary>
        /// 处理上传文件块
        /// </summary>
        /// <param name="message">消息</param>
        /// <param name="chunkInfo">文件块信息</param>
        /// <returns>完成上传时返回消息</returns>
        async Task <string> IFileGrain.UploadFileChunk(string message, FileChunkInfo chunkInfo)
        {
            string targetPath = Path.Combine(UploadPath, chunkInfo.FileName);

            if (chunkInfo.Stop)
            {
                if (File.Exists(targetPath))
                {
                    File.Delete(targetPath);
                }
            }
            else
            {
                try
                {
                    await using (FileStream targetStream = new FileStream(targetPath, FileMode.OpenOrCreate, FileAccess.Write))
                    {
                        await chunkInfo.WriteAsync(targetStream);
                    }
                }
                catch (OperationCanceledException)
                {
                    if (File.Exists(targetPath))
                    {
                        File.Delete(targetPath);
                    }
                    throw;
                }

                if (chunkInfo.Done && _service != null)
                {
                    return(await _service.AfterUploadFile(message, targetPath));
                }
            }

            return(null);
        }