stream.CopyTo - 文件为空。 asp.net

时间:2012-02-19 13:29:10

标签: c# asp.net

我正在使用以下代码保存上传的图片:

using (var fileStream = File.Create(savePath))
{
   stream.CopyTo(fileStream);
}

当图像保存到目标文件夹时,它是空的,0 kb。这可能有什么不对吗?我在复制之前检查了stream.Length并且它不是空的。

3 个答案:

答案 0 :(得分:61)

您的代码没有任何问题。事实上,你说“我已经检查了stream.Length,然后复制并且它不是空的”让我在复制前对流位置感到疑惑。

如果你已经消耗了一次源流,那么虽然流的长度不是零,但它的位置可能在流的末尾 - 所以没有什么可以复制。

如果该流是可搜索的(适用于MemoryStreamFileStream以及许多其他人),请尝试添加

stream.Position = 0

就在复制之前。这会将流位置重置为开头,这意味着整个流将由您的代码复制。

答案 1 :(得分:1)

我建议将以下内容放在MultiValueDictKeyError

之前
CopyTo()

请确保在此之后使用fileStream.Position = 0 ,以避免复制后出现空文件。

Flush()

答案 2 :(得分:0)

从我的项目从.NET Core 1迁移到2.2之后,这个问题开始出现。

我通过将文件流的Position设置为零来解决此问题。

using (var fileStream = new FileStream(savePath, FileMode.Create))
{
    fileStream.Position = 0;
    imageFile.CopyToAsync(fileStream);
}