Загрузка файла и сохранение в базу данных некорректно - PullRequest
3 голосов
/ 08 ноября 2010

У меня проблемы с загрузкой файлов в базу данных. Таблица, в которую я загружаю, имеет следующую структуру:

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). Похоже, что файл загружен как правильный тип файла, однако я, когда пытался открыть его, сказал, что не могу его открыть.

Вот оригинальный учебник, которому я следовал: Учебник . Я получил это работать отлично, однако я хотел использовать ADO.net, поэтому я переписал немного. Однако я не внес никаких существенных изменений, как видно из моего кода, поэтому я не уверен, почему это происходит.

Я вставил точки останова в свое приложение, чтобы посмотреть, действительно ли заполняется байтовый массив, то есть только с нулями. alt text

Крышка контроллера

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>

1 Ответ

2 голосов
/ 08 ноября 2010

Возможно, потому что вы не Close() - ваш Stream

HttpPostedFileBase file = Request.Files["CoverUpload"];

cover.CoverMimeType = file.ContentType;
cover.CoverFileName = Path.GetFileName(file.FileName);
cover.FileID = int.Parse(Request.Form["FileID"]);

byte[] input = new byte[file.ContentLength];
using (Stream s = file.InputStream)
{
    s.Read(input, 0, file.ContentLength);
}

cover.CoverFileContent = input;

filerepository.AddCoverData(cover);
filerepository.Save();

return View(cover);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...