Stream.CopyTo()方法可以保存流不完整吗?
我有一个WCF服务,允许我以块的forms上传文件。 我想知道的是,此代码是否可能导致上传的流在任何情况下仅部分附加到目标流?
我有我的日志,告诉我所有发送的流都是512000字节(我在客户端设置),到目前为止我已经从9个块中发送了6个块。 但在服务器上,文件大小为2634325.这意味着发送的最后一个块(第6个)保存不完整。
什么可能导致这种行为? 我应该怎么做才能避免这种情况?
或者这是完全安全的,我应该在其他地方寻找错误?
public void UploadChunk ( RemoteFileChunk file ) { /// this file is not touched by anyone else var uploadPath = @"C:\some path\some.file"; using ( var targetStream = new FileStream(uploadPath, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None) ) { if ( targetStream.Length == file.ChunkNumber * Helper.ChunkSize ) { /// ---- streaming operation is here ---- targetStream.Position = targetStream.Length; file.Stream.CopyTo(targetStream); file.Stream.Close(); /// ------------------------------------- } else throw new FaultException(new DataIntegrityException { CurrentIndex = targetStream.Length, RequestedIndex = file.ChunkNumber * Helper.ChunkSize, Message = string.Format("{0}th chunk index requested when there already {1} chunks exist.", file.ChunkNumber, targetStream.Length / Helper.ChunkSize) }); } }
以下是客户端文件上传代码段:
var buffer = new byte[ChunkIndex != NumberOfChunks - 1 ? Helper.ChunkSize : LastPieceLen]; using ( var file = new FileStream(Info.FullName, FileMode.Open, FileAccess.Read, FileShare.None) ) { file.Position = (long)ChunkIndex * Helper.ChunkSize; file.Read(buffer, 0, buffer.Length); } var chunk = new MemoryStream(buffer); chunk.Position = 0; Service.StreamingEnd.UploadChunk(new RemoteFileChunk(FileId, CF.Id, VersionDate, ChunkIndex, chunk.Length, Sessions.Get(), chunk));
看看if语句 – 最后的块是否保证恰好是块大小? 如果您上传的文件大小不是块大小的倍数,会发生什么?
- 我被黑了。 上传的Evil aspx文件名为AspxSpy。 他们还在努力。 帮我陷阱吧!
- 建议的做法是在使用transactioncope时停止升级到分布式的事务
- 如何使用PopAsync将数据传递到上一页?
- BadImageFormatException无法加载文件或程序集或其依赖项之一。 尝试加载格式不正确的程序
- 控制器未收到英国格式的MVC3日期
- ‘ServiceCollection’不包含’AddSingleton’的定义
- DbContext类的IDbSet属性的适配器模式
- 使用SubSonic Simple Repository,LINQ和ASP.NET MVC生成的Funky Sql
- 在C#中取消/中止任务