2013-04-07 16 views
12

Aşağıdaki, tarayıcının doğrudan satır içi görüntülemeye çalıştığı bir PDF döndürür. Bu doğru çalışıyor. Ancak, dosyayı indirmeye çalışırsam, indirme adı "myPDF.pdf" değil, bunun yerine rotanın kimliğidir (myapp/controller/PDFGenerator/ID). Dosya indirme ismini "myPDF.pdf" olarak ayarlamak mümkün mü?8 ASP.NET MVC FileStreamResult, fileDownloadName kullanılmıyor

public FileStreamResult PDFGenerator(int id) 
{ 
    MemoryStream ms = GeneratePDF(id); 

    byte[] file = ms.ToArray(); 
    MemoryStream output = new MemoryStream(); 
    output.Write(file, 0, file.Length); 
    output.Position = 0; 
    HttpContext.Response.AddHeader("content-disposition", 
    "inline; filename=myPDF.pdf"); 

    return File(output, "application/pdf", fileDownloadName="myPDF.pdf"); 
} 

cevap

15

Hayır, bu satır içi görüntülenen bir PDF ile mümkün değildir.

public ActionResult PDFGenerator(int id) 
{ 
    Stream stream = GeneratePDF(id); 
    return File(stream, "application/pdf", "myPDF.pdf"); 
} 

Ayrıca ben kullanmakta ve doğrudan onu akış sahip olabilir bellekte PDF yüklüyormuş gereksiz MemoryStream kaldırıldı duyuru ile: Bir ek olarak ile Content-Disposition başlığını göndermek varsa bu elde edebiliriz çok daha verimli olan müşteri.

+0

Evet gibi biter. Dosyanın satır içi görüntülenmesini istiyorsanız ** bir dosya adı belirtemezsiniz **. PDF dosyasını satır içi görüntülerseniz, PDF dosyalarını açmak için istemci makinede ilişkilendirilmiş eklenti ile açılır. Davranış çeşitli eklentiler arasında değişecektir. –

+0

@Nalan M yanıtı, çoğu durumda indirmeye zorlayabilir. Yani, mümkün olmadığı söylenmemeli. –

+0

Bir soru, akışı burada bertaraf etmekle kim ilgileniyor? – Legends

4

Dosyayı indirmek FileStreamResult kullanıyorsanız, denetleyici

Response.ContentType = "application/pdf"; 
Response.AddHeader("Content-Disposition", "attachment; filename=FileName.pdf"); 
+0

PDF'ye aktarma işlemimin bir kısmı, ek türü yerine ** iframe ** yerine ** düz metin ** gibi verileri döndürür. Bu iki satırı kaydetmek için kaydetme penceresini açmaya zorladım. – OldTrain

0

O id uzantısı olmadan dosya adını temsil eden bir dize yaparak mümkündür bu kullanmayı deneyin.

public ActionResult PDFGenerator(string id, int? docid) 
{ 
    Stream stream = GeneratePDF(docid); 
    return new FileStreamResult(stream , "application/pdf"); 
} 

url sonra o benim cevabın bütün mesele idi, bu

..PDFGenerator/Document2?docid=15