我正在实现一个接受图像流的wcf服务.但是当我运行它时,我正在获得异常.因为它试图在流完成之前获取流的长度.所以我想做的是缓冲流直到完成.但我无法找到任何如何做到这一点的例子......
有人可以帮忙吗?
我的代码到目前为止:
public String uploadUserImage(Stream stream)
{
Stream fs = stream;
BinaryReader br = new BinaryReader(fs);
Byte[] bytes = br.ReadBytes((Int32)fs.Length);// this causes exception
File.WriteAllBytes(filepath, bytes);
}
Run Code Online (Sandbox Code Playgroud)
您应该从流中读取,直到它返回它已"完成",而不是尝试获取长度.在.NET 4中,这非常简单:
// Assuming we *really* want to read it into memory first...
MemoryStream memoryStream = new MemoryStream();
stream.CopyTo(memoryStream);
memoryStream.Position = 0;
File.WriteAllBytes(filepath, memoryStream);
Run Code Online (Sandbox Code Playgroud)
在.NET 3.5中没有CopyTo方法,但您可以自己编写类似的东西:
public static void CopyStream(Stream input, Stream output)
{
byte[] buffer = new byte[8192];
int bytesRead;
while ((bytesRead = input.Read(buffer, 0, buffer.Length)) > 0)
{
output.Write(buffer, 0, bytesRead);
}
}
Run Code Online (Sandbox Code Playgroud)
但是,现在我们有了复制流的东西,为什么还要先把它全部读入内存呢?让我们直接把它写到一个文件:
using (FileStream output = File.OpenWrite(filepath))
{
CopyStream(stream, output); // Or stream.CopyTo(output);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3359 次 |
| 最近记录: |