簡體   English   中英

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

[英]stream.CopyTo - file empty. asp.net

我正在使用以下代碼保存上傳的圖像:

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

當圖像保存到其目標文件夾時,它是空的,0 kb。 這里可能有什么問題? 我在復制之前檢查了 stream.Length 並且它不是空的。

您的代碼沒有任何問題。 你說“我在復制之前檢查了 stream.Length 並且它不是空的”這一事實讓我想知道復制前的流位置

如果您已經使用過一次源流,那么盡管該流的長度不是零,但它的位置可能位於流的末尾 - 所以沒有什么可復制的了。

如果流是可查找的(它將用於MemoryStreamFileStream和許多其他流),請嘗試放置

stream.Position = 0

就在副本之前。 這會將流位置重置為開頭,這意味着您的代碼將復制整個流。

我建議將以下內容放在CopyTo()之前

fileStream.Position = 0

確保在此之后使用Flush() ,以避免復制后出現空文件。

fileStream.Flush()

在將我的項目從 .NET Core 1 遷移到 2.2 后,我開始遇到這個問題。

我通過將文件流的Position設置為零來解決此問題。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM