3
我有點問題上傳文件到數據庫。我上傳到該表的結構如下:文件上傳和保存到數據庫不正確
dbo.Cover
CoverID int PK
CoverFileContent varbinary(max)
CoverMimeType nvarchar(50)
CoverFileName nvarchar(50)
FileID int FK
我可以用我的MVC應用程序沒有任何錯誤上傳文件,但在數據庫中CoverFileContent的文件存儲爲「0x0000000000000000 ...... 」。與文件有關的所有其他信息,例如MimeType,FileName,CoverID等正確上傳。我大肆猜測這是不正確的,所以我下載了該文件(創建了一個.net MVC下載程序)。它似乎下載爲正確類型的文件,但是當我試圖打開它時,它告訴我我無法打開它。
這是我的原始教程如下:Tutorial。我已經完成了這個工作,但是我想使用ADO.net,所以我重寫了一下。我沒有做出任何重大改變,但從我的代碼可以看出,所以我不知道爲什麼會發生這種情況。
我在我的應用程序中插入了斷點,以查看字節數組是否實際上被填充,這是隻有零。
封面控制器
public ActionResult CreateCover(int id)
{
Cover cover = new Cover();
cover.FileID = id;
return View(cover);
}
//
//POST: /File/CreateCover
[HttpPost]
public ActionResult CreateCover(Cover cover)
{
cover.CoverMimeType = Request.Files["CoverUpload"].ContentType;
Stream fileStream = Request.Files["CoverUpload"].InputStream;
cover.CoverFileName = Path.GetFileName(Request.Files["CoverUpload"].FileName);
int fileLength = Request.Files["CoverUpload"].ContentLength;
cover.CoverFileContent = new byte[fileLength];
fileStream.Read(cover.CoverFileContent, 0, fileLength);
cover.FileID = int.Parse(Request.Form["FileID"]);
filerepository.AddCoverData(cover);
filerepository.Save();
return View(cover);
//return View("CreatePdf", "Pdf", new { id = cover.FileID });
}
CreateCover.aspx
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<SampleApp.Models.Cover>" %>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
CreateCover
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<h2>CreateCover</h2>
<% using (Html.BeginForm("CreateCover", "Cover", FormMethod.Post, new { enctype = "multipart/form-data" }))
{ %>
<%: Html.HiddenFor(model => model.FileID) %>
<asp:Label ID="Label2" runat="server" Text="Please Select your eBook Cover" /><br />
<input type="file" name="CoverUpload" /><br />
<input type="submit" name="submit" id="Submit" value="Upload" />
<% } %>
<div>
<%: Html.ActionLink("Back to List", "Index") %>
</div>
</asp:Content>
嗨,獵人。感謝您的回覆。我將在明天再次在辦公室時嘗試這一點。只是一個簡短的問題,你認爲Close()是什麼意思?謝謝,T. – 109221793 2010-11-08 20:08:48
將'Stream'封裝在'using'塊中會在它離開這個將調用'Close()'的塊時調用Dispose()。這只是確保你已經發布了這個資源。可能還有其他一些問題,但這是一個好的開始。 – hunter 2010-11-08 20:17:46
很酷,謝謝亨特。將在早上嘗試一下,然後更新它。 – 109221793 2010-11-08 20:20:26