我有一个ASP.NET MVC应用程序(我也使用jQuery)。
我允许用户使用HttpPostedFileBase
类上传文件。
然后,我使用类型为InputStream
的Stream
属性将文件流保存到我拥有的某个数据库中,首先在该数据库中序列化对象。 Stream
是可序列化的,因此这里没有问题。
当用户不上传文件时,问题就开始了,在这种情况下,我希望使用我在某处拥有的另一个默认文件。
在这种情况下,一切都必须与第一种情况相似,因此最终我的数据库中将有一个Stream
。因此,我必须实例化一个Stream
并将其存储。 Stream
是抽象的,所以我不能实例化Stream
。相反,我使用了FileStream
,它继承了Stream
。问题是FileStream
不能序列化,所以这里有一个问题。
我该如何解决?我是否可以使用另一个流,该流继承Stream
并且可序列化?
最佳答案
不要序列化流以进行存储;流是“软管”,而不是“桶”。相反,请读取流并存储二进制数据(大多数数据库将具有二进制数据的数据类型,例如varbinary(max)
)。如果这是对象模型的一部分,我倾向于具有byte[]
属性(具有有意义的名称);这将作为模型的一部分进行简单的序列化。只需读取流以创建byte[]
;任务完成。例如:
public static byte[] ReadToEnd(this Stream s) {
using(var ms = new MemoryStream()) {
s.CopyTo(ms);
return ms.ToArray();
}
}
关于c# - 继承类Stream并可以序列化C#的Stream,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7358923/