2011-06-30 11 views
9

Sayfamda, kullanıcı isteği ile oluşturduğum bir dosyaya indirme bağlantım var. Şimdi dosya boyutunu görüntülemek istiyorum, böylece tarayıcı ne kadarının indirileceğini görüntüleyebilir. Bir çözüm olarak, sanırım isteğin işe yarayacağı bir Başlık ekledim, ama şimdi nasıl yapacağımı bilmiyorum. Ben fiddler üzerinde işaretlendiğindeASP.NET MVC 3'te HTTPContext Yanıtında Üstbilgiler Nasıl Eklenir?

public FileStreamResult DownloadSignalRecord(long id, long powerPlantID, long generatingUnitID) 
     { 

       SignalRepository sr = new SignalRepository(); 
       var file = sr.GetRecordFile(powerPlantID, generatingUnitID, id); 
       Stream stream = new MemoryStream(file); 

       HttpContext.Response.AddHeader("Content-Length", file.Length.ToString()); 

       return File(stream, "binary/RFX", sr.GetRecordName(powerPlantID, generatingUnitID, id) + ".rfx"); 


     } 

, bu içerik-uzunluk başlığı görüntü vermedi:

İşte benim deneyin kodudur. beyler bana yardım edermisiniz?

cevap

11

HttpContext.Current.Response.AppendHeader("Content-Length", contentLength);

+0

kullanarak. –

+1

Tamam, daha sonra 'Current'’ı terk edin. Sadece orijinal kodunuzda 'AddHeader 'yerine' AppendHeader' kullanın. – Mrchief

0

emin değil başka ne var yanlış olabilir deneyin, ama bu içerik uzunlukta ikili büyüklüğü değil, dize uzunluğu olmalıdır.

+0

Aslına bakılırsa, uzunluğun uzunluğu, ikili uzunluğun uzunluğu olacak, değil mi? –

+0

@Mikael ........... Yep – heisenberg

3

Aşağıdaki kodu deneyebilir ve bunun işe yarayıp yaramadığını görebilir misiniz?

public FileStreamResult Index() 
{ 
    HttpContext.Response.AddHeader("test", "val"); 
    var file = System.IO.File.Open(Server.MapPath("~/Web.config"), FileMode.Open); 
    HttpContext.Response.AddHeader("Content-Length", file.Length.ToString()); 
    return File(file, "text", "Web.config"); 
} 

"Bu benim makinede çalışır" Ve ben Content-length başlığındaki olmadan denedim ve Fiddler zaten bir içerik uzunluğu başlığını bildirir. Bunun gerekli olduğunu düşünmüyorum.

+0

Örneğiniz işe yaradı, ancak dosyamı oluşturduğumda, bu olmayacak./ –

+0

Akışın aslında herhangi bir şey içerdiğini kontrol ettiniz mi? sr.GetRecordFile (..) 'bir bayt []' döndürür, değil mi? –

0

Bu, byte[] doğrudan kullanabildiğiniz zaman, FileStreamResult kullanmanıza gerek olmadığını düşündüğünden, bunu çözmelidir.

public FileContentResult DownloadSignalRecord(long id, long powerPlantID, long generatingUnitID) 
{ 
    SignalRepository sr = new SignalRepository(); 
    var file = sr.GetRecordFile(powerPlantID, generatingUnitID, id); 

    HttpContext.Response.AddHeader("Content-Length", file.Length.ToString()); 

    return File(file, "binary/RFX", sr.GetRecordName(powerPlantID, generatingUnitID, id) + ".rfx"); 
} 

Not FileContentResult dönüş türü.

10

Güncel HttpContext içeride yok deneyin

HttpContext.Response.Headers.add("Content-Length", file.Length.ToString());