c#中将客户端文件存入sqlserver数据库中,不是以流的形式存储,是以文件的形式存储,有哪位大神实现过啊,指点一二啊
public ActionResult Image(int vehicleId)
{
byte[] foundBuff = null;
foundBuff = Table.Where(t => t.VehicleID == vehicleId).Select(f => f.Photo).FirstOrDefault();
//try{foundBuff = Table.Where(t => t.VehicleID == vehicleId).Select(f => f.Photo).FirstOrDefault();}catch (Exception){}
if (foundBuff == null)
{
var createNew = System.Drawing.Image.FromFile(Server.MapPath("~/img/nophoto.fw.png"));
var stream = new MemoryStream();
createNew.Save(stream,System.Drawing.Imaging.ImageFormat.Png);
foundBuff = stream.ToArray();
}
var converter = new ImageConverter();
var image = (Image)converter.ConvertFrom(foundBuff);
return new ImageResult()
{
Image = image,
ImageFormat = System.Drawing.Imaging.ImageFormat.Png
};
}
public ActionResult ModifyImage()
{
if (Request.Files.Count == 0) return new HttpStatusCodeResult(HttpStatusCode.ExpectationFailed, "Not found the file of upload");
var vehicleId = Request["hp0"];
if (vehicleId == null || vehicleId.Equals("0")) return new HttpStatusCodeResult(HttpStatusCode.ExpectationFailed, HttpUtility.HtmlEncode("Not get the VehicleId "));
var vehicleId0 = Convert.ToInt32(vehicleId);
var vehicleEntity = Table.FirstOrDefault(t => t.VehicleID == vehicleId0);
if (vehicleEntity == null) return new HttpStatusCodeResult(HttpStatusCode.ExpectationFailed, HttpUtility.HtmlEncode("Not found the vehicle data in db"));
var file = Request.Files[0];
var photoListArray = new List<byte>();
using (file.InputStream)
{
var value = file.InputStream.ReadByte();
while (file.InputStream.CanRead && value > -1)
{
photoListArray.Add((byte)value);
value = file.InputStream.ReadByte();
if (photoListArray.Count > 2465792)
{
file.InputStream.Close();
return new HttpStatusCodeResult(HttpStatusCode.ExpectationFailed, HttpUtility.HtmlEncode("The file can't be more than 2MB"));
}
}
file.InputStream.Close();
}
vehicleEntity.Photo = photoListArray.ToArray();
Db.Entry(vehicleEntity);
Db.SaveChanges();
return Redirect(string.Format("/VehicleImage/Index?vehicleId={0}&vehicle={1}", vehicleEntity.VehicleID, vehicleEntity.LicensePlat));
}
存文件路径比较好
公司要求是需要将文件存入数据库中,这样利于操作,也比较安全,文件也不易与丢失
json格式,xml格式的“文本”(比如varchar(1024))试过
有没有源码啊,
sql server支持 binary的数据类型,可以存储文件的字节数据。
这样做不还是以流的形式存储了吗????
@凤小九:
不论你直接让服务器的文件系统存储文件,还是让服务器的数据库存储文件,这个过程总是 “以流的形式存储”。
@西漠以西: 哎,这样吗,那为什么要分文件存储到数据库和流保存导数据库呢?本质都是以流的形式存储吗
你先解释下流和文件 的区别...
文件和流 I/O(输入/输出)是指在存储媒介中传入或传出数据。 在 .NET Framework 中,System.IO 命名空间包含允许同时以异步方式和同步方式对数据流和文件进行读取和写入操作的类型。 这些命名空间还包含对文件执行压缩和解压缩的类型,以及通过管道和串行端口启用通信的类型。
文件是一个由字节组成的有序的命名集合,它具有永久存储。 在处理文件时,你将处理目录路径、磁盘存储、文件和目录名称。 相反,流是一个字节序列,可用于对后备存储进行读取和写入操作,后备存储可以是多个存储媒介之一(例如,磁盘或内存)。 正如存在除磁盘之外的多种后备存储一样,也存在除文件流之外的多种流(如网络、内存和管道流)。
@凤小九: 流是操作文件的一种的方式.
没有保存成流的说.是 将流保存起来.
最终都是一个二进制数组.没有区别.
至于dudu说的文件系统.和你的问题描述也不是一回事.
@吴瑞祥: 这样吗?那公司要求将本地文件保存到数据库怎么说啊?
@吴瑞祥: 这部分的我以前都没有接触过,满脑都是问号
@凤小九: 就是二进制数组就行了.只不过这种做法不好.一般不推荐.
文件存放这种说法只是我们直观的感受而已,你读取存放的时候不还是“流”么?
而且没有什么文件放db里面安全方便操作这一说,不可否认db的确可以存放文件这种数据,但你不觉得有点大炮打蚊子的感觉么?说个简单点的需求如果要存放的文件超过2G你怎么掰?如果读取某包含文件的请求量大点了后你db怎么搞?
直接存在服务器上,将文件名和位置存到数据,通过ftp或别的方法上传下载就可以了,而且可以通过网页或者内置浏览器控件直接预览
存在数据库,读写很慢的