2009-08-31 6 views
2

J'ai téléchargé un fichier texte dans ma base de données dans un champ Image. Le problème est lorsque j'essaie de récupérer le fichier (rendre l'utilisateur capable de le télécharger en cliquant sur un lien). Lorsque j'essaie de le télécharger, il est simplement rempli avec le contenu de la page Web (tout le code HTML est rempli dans le fichier texte). Je considère qu'il s'agit d'une erreur dans la façon dont j'essaie de télécharger le fichier. N'est-il pas possible de diffuser le contenu dans un fichier, sans d'abord l'enregistrer dans un fichier temporaire?Enregistrer le fichier à partir du champ Image de la base de données

Le code que j'utilise est illustré ci-dessous. Uploadfiles est ma classe qui contient les données, id, nom, etc.

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

Répondre

2

On dirait que vous avez trop du reste de la page va au client. Vous devez effacer la réponse et la fermer après; essayez:

sender.Response.Clear(); 
sender.Response.ContentType = uf.FileType; // the binary data 
sender.Response.AddHeader("Content-Disposition", "attachment; filename=" 
     + uf.FileName); 
sender.Response.BinaryWrite(uf.FileData); 
sender.Response.Close(); 

Vous pouvez également utiliser un gestionnaire (ashx) pour le faire - car cela ne comprend pas le balisage de la page régulière.

+0

J'ai ajouté le .Clear() et le .close(), mais maintenant il ne me demande pas d'enregistrer ou ouvrir le fichier, et continue à charger pour toujours. Je pense que c'est parce que je ferme le fichier, avant que l'utilisateur ait eu la possibilité de le sauvegarder? – Dofs

+0

J'ai découvert que je devrais écrire sender.Respons.Close() et puis je n'ai pas obtenu tout le code HTML. Mais maintenant le fichier contient juste une chaîne "System.Byte []" et pas le contenu réel? – Dofs

+0

Je vais faire un nouveau sujet avec la nouvelle question. – Dofs

Questions connexes