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.
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>
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
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
Cool, merci Hunter. Je vais essayer le matin et vous mettre à jour dessus. – 109221793