2009-08-31 9 views
0

J'essaie de télécharger un fichier que j'ai téléchargé dans un champ d'image de ma base de données MS-SQL. Le problème est que lorsque j'essaie d'ouvrir le fichier, il dit simplement System.Byte [] au lieu de contenir le contenu réel.Lire le fichier de la base de données

uploadfiles est ma classe qui contient le nom de fichier, id, filedata etc.

public void DownloadUploadedFile(Page sender, UploadFiles uf) 
{ 
    sender.Response.Clear(); 
    sender.Response.ContentType = uf.FileType; 
    sender.Response.AddHeader("Content-Disposition", 
     "attachment; filename=" + uf.FileName); 
    sender.Response.BinaryWrite(uf.FileData); // the binary data 
    sender.Response.End(); 
} 

Ici, je récupère les données de ma base de données:

while (reader.Read()) 
        { 
         UploadFiles uf = new UploadFiles(); 
         uf.FileData = encoding.GetBytes(reader["filedata"].ToString()); 
         uf.FileName = reader["name"].ToString(); 
         uf.FileType = reader["filetype"].ToString(); 
         uf.FileId = Convert.ToInt32(reader["id"]); 
         return uf; 
        } 
+0

Vous êtes sûr que les données binaires sont récupérées/stockées dans votre objet? Pouvez-vous montrer comment vous avez obtenu les données de la base de données? – CSharpAtl

+0

pensé qu'il pourrait avoir à faire avec la récupération ... heureux que vous ayez la réponse. – CSharpAtl

Répondre

2

Le

uf.FileData = encoding.GetBytes(reader["filedata"].ToString()); 

devrait être

uf.FileData = (byte[])reader["filedata"]; 

Les données renvoyées est un tableau d'octets, et que vous appelez ToString() sur le tableau d'octets, qui vient par défaut de restituer le nom de la classe (système .byte []) - que vous convertissez ensuite en un tableau d'octets. Il devrait juste être jeté immédiatement

+0

Bien sûr, vous devez d'abord vérifier la valeur NULL, qui est renvoyée en tant que DbNull.Value, si le champ peut avoir des valeurs nulles. – Pete

+0

Merci beaucoup cela a fonctionné! Je n'ai jamais pensé que cela pourrait être l'encodage lors de la récupération des fichiers. Le champ de base de données n'autorise pas les types null, donc dans ce cas, il n'est pas nécessaire. – Dofs

-1

Essayez uf.FileName.ToString(), sinon vous obtenez le type d'objet, pas le texte de la propriété FileName.

+0

uf.FileName est une propriété de ma classe qui contient le nom du fichier. Je l'ai débogué et il renvoie test.txt. Aussi, comme je l'ai mentionné, UploadFiles n'a rien à voir avec le contrôle du fichier asp, mais c'est ma propre classe qui contient les propriétés. – Dofs

Questions connexes