2012-04-24 2 views
1

J'ai quelques fichiers EML avec des pièces jointes. Je l'ai analysé les fichiers EML tiré les pièces jointes, et si je fais ceci:MVC3 Razor fournir un lien vers le fichier en mémoire (pas sur le disque)

File.WriteAllBytes (attachment.Name, Convert.FromBase64String (attachment.Data))

Je reçois la pièce jointe à un objet d'un dumping fichier. Ce que je veux faire est d'avoir un lien de sorte que lorsque l'utilisateur clique dessus, le téléchargement des pièces jointes. Assez facile si c'est un fichier déjà sur le disque, mais à la place j'ai cette chaîne base64encoded que je peux convertir en un tableau d'octets. Comment puis-je prendre cette chaîne base64encoded (ou le tableau byte converti) et générer un lien directement à cela?

Merci

Répondre

2

Vous retourner une classe FileResult avec les données d'une autre méthode d'action:

public ActionResult DownloadData(string fileNameOrWhatever) 
{ 
     byte[] fileData = ...; 

     return File(fileData, "someMimeType", "downloadNameToBeDisplayed"); 
} 

Votre lien serait alors pointer ici:

<a href="/DownloadData/Something">Click me!</a> 
+0

Merci une tonne - C'est ce que j'ai utilisé et cela fonctionne comme un charme. – user1354486

0

Est-ce MVC? Vous pouvez créer une méthode de contrôleur qui renvoie un FileStreamResult, créer une action pour lier et écrire les données.

0

J'ai un projet dans lequel je crée un document Excel sur le serveur et l'utilisateur recevra le fichier en tant que télécharger quand ils naviguent vers l'action spécifique. Voici le code que j'utilise, et je pense que vous pouvez le refactoriser pour ce dont vous avez besoin:

public void GetExcel(string id) 
    { 
     ExcelPackage p = new ExcelPackage(); 

     //code to add data to the document    

     Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; 
     Response.AddHeader("content-disposition", "attachment; filename=BitlyReport.xlsx"); 
     MemoryStream stream = new MemoryStream(p.GetAsByteArray()); 
     Response.OutputStream.Write(stream.ToArray(), 0, stream.ToArray().Length); 

     Response.Flush(); 

     Response.Close(); 
    } 
Questions connexes