2008-11-17 8 views
0

J'ai stocké un fichier txt sous forme de chaîne dans une colonne de base de données. Maintenant, sur l'une de mes pages aspx j'ai un lien ... Je veux ouvrir un fichier txt lorsque l'utilisateur clique sur ce lien. Comment puis-je lire un fichier de la base de données. Je sais comment faire cela en utilisant streamreader pour un fichier stocké sur le disque.Lecture d'un fichier de la base de données

Merci

Répondre

1

Cela va prendre quelques éclaircissements.

Si le fichier est stocké sous forme de chaîne dans la base de données, il suffit de le lire dans une chaîne et de l'afficher dans une page.

public void Page_Load(object sender, EventArgs e) 
    var text = (from x in dataContext.MyTextTable where x.Id == someId select x.FileText).FirstOrDefault(); 

    this.textBox.Text = text; 
} 

Ok, voici ce que vous devez faire. Pseudocode suit:

charge la chaîne à partir de la base de données
Utilisez la méthode ToCharArray() sur la chaîne pour obtenir un tableau de caractères Utilisez le objet HttpResponse écrire() le tableau de caractères dans le flux de réponse

Voici un code presque compilable:

public void Page_Load(object sender, EventArgs e) 
{ 
    var text = Repository.GetTextFile(this.FileTextBox.Text).ToCharArray(); 

    Response.Clear(); 
    Response.AddHeader("Content-Disposition", "attachment; filename=" & this.FileTextBox.Text); 
    Response.AddHeader("Content-Length", text.Length.ToString()); 
    Response.ContentType = "application/octet-stream"; 
    Response.Write(text, 0, text.length); 
    Response.End(); 
} 

je crois que le type mime devrait être que, plutôt que du texte/clair que le navigateur peut tenter d'ouvrir le fichier plutôt que de l'enregistrer comme une pièce jointe. Pourquoi voulez-vous stocker un fichier dans une colonne de base de données?

+0

Nope..I veulent ouvrir le fichier en pièce jointe (avec une option d'épargne, d'économie, etc.). Désolé si ma question n'était pas claire. Merci – Mithil

0

Les bases de données sont meilleures pour les choses que vous avez vraiment besoin d'interroger ... C'est utile pour les requêtes comme «donne moi tous les liens donnés des 30 derniers jours» ou «obtiens toutes les voitures bleues avec des décorations intérieures en tissu».

Les fichiers sont simplement mieux gérés par le système de fichiers du système d'exploitation. Si vous devez cependant avoir un enregistrement sur le fichier, vous pouvez placer un enregistrement et placer le chemin d'accès au fichier dans la colonne de chaîne.

+0

C'est l'exigence du projet ... Je n'ai pas de mot à dire pour cela. Merci – Mithil

2

Si vous avez vraiment besoin de stocker le fichier dans une base de données (et je suis entièrement d'accord avec Will sur ce point, vous ne devriez pas), vous pouvez envisager d'implémenter une page de téléchargement séparée (par exemple getfile.aspx) responsable de l'obtention de la chaîne de la base de données en fonction d'un identifiant, peut-être (getfile.aspx? fileId = 12345), en définissant les en-têtes HTTP appropriés et en publiant le contenu directement dans le navigateur. En définissant l'en-tête de type de contenu, vous devriez être en mesure de forcer le navigateur à voir la page aspx comme un fichier txt, ou tout autre format de fichier reconnaissable.

Je vous recommande fortement d'essayer de faire changer la portée du projet pour ne pas stocker le fichier dans la base de données, car cette méthode peut être très désordonnée très rapidement.

+0

Oui, c'est ce que je fais, mais le problème est dans le code réel. J'ai un flux de fichiers oFileStream = System.IO.File.Open (sFullFilePath, IO.FileMode.Open, System.IO.FileAccess.Read) mais je ne peux pas l'utiliser parce que je n'ai pas de chemin de fichier puisque j'ai le contenu dans une chaîne "sFileToBeProcessed" – Mithil

Questions connexes