【发布时间】:2015-11-27 20:01:17
【问题描述】:
我一直在努力解决这个问题。我正在尝试将文件上传到服务器并将其保存为数据库中的二进制数据。
我知道如何将文件上传到服务器,并且工作正常。
我需要知道如何将文件保存为数据库中的二进制数据。
这是我已经完成的:
在 SQL Server 数据库中,我有一个名为 files 的表,其中包含以下列:
Id, int, identity column
FileName, nvarchar(50)
UploadDate, datetime
FileContent, varbinary(max)
HomeController.cs:
[HttpPost]
public ActionResult Index(HttpPostedFileBase[] files)
{
try
{
foreach (var file in files)
{
// extract only the filename
var fileName = Path.GetFileName(file.FileName);
// extract the file content to byte array
var content = new byte[file.ContentLength];
// reads the content from stream
file.InputStream.Read(content, 0, file.ContentLength);
//get file extesion
var fileExtension = Path.GetExtension(fileName);
//save file name as uniqe
var uniqueFileName = Guid.NewGuid().ToString();
Files fu = new Files
{
FileName = uniqueFileName,
UploadDate = DateTime.Now,
FileContent = content
};
DB.Files.Add(fu);
DB.SaveChanges();
}
}
catch (Exception e) { }
// redirect back to the index action to show the form once again
return RedirectToAction("Index");
}
index.cshtml:
@using (Html.BeginForm("Index", "Home", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<input type="file" name="files" multiple/>
<input type="submit" value="OK" />
}
这段代码在数据库表中插入一条记录,记录如下:
Id FileName UploadDate FileContent
1 716d30a5-8019-4ec9-a5e9-5b3966296bfc 2015-11-27 21:50:27.037 <Binary data>
我不知道为什么fileContent 列会填满文本<Binary data>。
【问题讨论】:
-
InputStream.Read不像你认为的那样工作,你必须使用重新调整的 int 并继续阅读,直到你完全阅读数据。 -
这就是 SQL Server 显示二进制数据的方式。您的数据没有被神奇地转换为“二进制数据”。
-
@ataravati,不是每个人都有 15 年的经验:) 现在我知道了......谢谢
标签: sql-server asp.net-mvc entity-framework