2010-11-08 17 views
3

Je rencontre un léger problème lors du chargement de fichiers dans une base de données. Le tableau je télécharger sur a la structure suivante:Le chargement et l'enregistrement de fichier dans la base de données sont incorrects

dbo.Cover 
CoverID   int PK 
CoverFileContent varbinary(max) 
CoverMimeType  nvarchar(50) 
CoverFileName  nvarchar(50) 
FileID   int FK 

Je peux télécharger le fichier en utilisant mon application MVC sans aucune erreur, mais dans la base de données stocke les fichiers dans des CoverFileContent comme « 0x0000000000000000 ...... ". Toutes les autres informations relatives au fichier, par ex. MimeType, FileName, CoverID, etc télécharge correctement. J'ai pris une conjecture sauvage que ce n'était pas correct alors j'ai téléchargé le fichier (créé un .net MVC downloader). Il semblait télécharger le bon type de fichier, cependant quand j'ai essayé de l'ouvrir, il m'a dit que je ne pouvais pas l'ouvrir.

Voici le tutoriel original que je suivais: Tutorial. J'ai réussi à ce que cela fonctionne parfaitement, mais je voulais utiliser ADO.net donc j'ai réécrit est légèrement. Je n'ai pas apporté de changements significatifs mais comme je peux le voir dans mon code, je ne sais pas pourquoi cela se produit.

J'ai inséré des points de rupture dans mon application pour voir si le tableau d'octets était réellement rempli, ce qui était mais seulement avec des zéros. alt text

Couverture contrôleur

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> 

Répondre

2

Probablement parce que vous n'êtes pas Close() -ment votre 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); 
+0

Salut chasseur. Merci pour votre réponse. Je vais essayer ça demain quand je serai de nouveau au bureau. Juste une question rapide, qu'entendez-vous par Fermer() - le flux? Merci, T. – 109221793

+0

Envelopper le 'Stream' dans un bloc' using' appellera 'Dispose()' quand il quittera ce bloc qui appellera 'Close()'. Cela garantit simplement que vous avez publié cette ressource. Il pourrait y avoir un autre problème, mais c'est un bon début. – hunter

+0

Cool, merci Hunter. Je vais essayer le matin et vous mettre à jour dessus. – 109221793