我正在使用此代码保存上传的图像:
using (var fileStream = File.Create(savePath))
{
stream.CopyTo(fileStream);
}
当图像保存到目标文件夹时,它是空的,0 kb。这里可能出了什么问题?我在复制之前检查了stream.Length并且它不为空。
您的代码没有任何问题。您说“我在复制之前检查了流。长度并且它不为空”这一事实让我想知道复制之前的流位置。
如果您已经使用过源流一次,那么尽管流的长度不是零,但它的位置可能位于流的末尾 - 所以没有什么可以复制的。
如果流是可查找的(对于
MemoryStream
或 FileStream
以及许多其他流),请尝试放置
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);
}
包含 FileAccess 和 FileShare 将很有帮助,尤其是当路径是 NFS/CIFS 时
文件流(字符串,文件模式,文件访问,文件共享)
未经授权的访问异常 对于指定的路径,操作系统不允许所请求的访问,如
当访问权限为 Write 或 ReadWrite 并且文件或目录设置为只读访问权限时。