2008-12-03 12 views
6

Bazı belgeleri saklayan bir sql veritabanına sahibim.C# ASP.NET 3.5 içerik tutma dosyası indirme sorunları

Bir kullanıcı uygulamaya girebilir ve belgelerinin listesini görüntüleyebilir.

Belgeleri bir kılavuz görünümünde bir bağlantı indirme tıklatıldığında, dosyayı veritabanından alır, dosya sistemine yazar ve sonra bu kodu çalıştırır.

System.IO.FileInfo file = new System.IO.FileInfo(System.Configuration.ConfigurationManager.AppSettings["UploadPath"] + DocumentName); 

    Response.Clear(); 
    Response.ClearContent(); 
    Response.ClearHeaders(); 
    Response.Cookies.Clear(); 
    Response.Cache.SetCacheability(HttpCacheability.Private); 
    Response.CacheControl = "private"; 
    Response.Charset = System.Text.UTF8Encoding.UTF8.WebName; 
    Response.ContentEncoding = System.Text.UTF8Encoding.UTF8; 
    Response.AppendHeader("Content-Length", file.Length.ToString()); 
    Response.AppendHeader("Pragma","cache"); 
    Response.AppendHeader("Expires", "60"); 
    Response.ContentType = GetContentType(file.Extension); 
    Response.AppendHeader("Content-Disposition", 
    "inline; " + 
    "filename=\"" + file.Name + "\"; " + 
    "size=" + file.Length.ToString() + "; " + 
    "creation-date=" + DateTime.Now.ToString("R") + "; " + 
    "modification-date=" + DateTime.Now.ToString("R") + "; " + 
    "read-date=" + DateTime.Now.ToString("R")); 

Benim getContentType() metodu sadece ben "application/pdf, uygulama/msw0rd izin veriyorum dosyaları için uygun dosya türünü döndürür vb

Benim sorundur dosya kaydedilmesini zaman, dosya sistemi değil, web sayfasının kendisi ve google chrome, dosya adının sonuna bir .htm uzantısı koyuyor, sanırım bu bir web sayfası olduğunu biliyordur?

Neyse, harika bir ilk adım, gerçek dosyayı almak ve HTML'de web sayfasının bir kopyasını değil!

Teşekkürler.

cevap

9

??

ben genellikle Response.TransmitFile yöntemini kullanın, temelde dosyayı açar ve içeriğini Response.OutputStream

'a gönderir.
3

İçerik satırını "satır içi" yerine "ek" olarak ayarlamayı denediniz mi? Tarayıcının daha sonra kullanıcıyı belgeyi açmasını veya kaydetmesini istediğini düşünüyorum.

Ayrıca, dosya sisteminden bayt akışınızı doğrudan Veritabanından BinaryWrite yöntemiyle doğrudan Response nesnesine yazarak atlayabilirsiniz ... Bu, aynı zamanda bir HTTP Handler kullanarak araştırmak isteyebileceğiniz bir durumdur. Bir ASPX sayfası, böylece Yanıtı temizlemek için endişelenmenize gerek kalmaz, vb. Sayfasında gizli bir iframe kullanarak geçmişte başarılı oldum, daha sonra src'yi belgeyi alan bir HTTP İşleyicisine ayarlamak için Javascript kullanarak QueryString'de bir parametre olarak kimliği. Bunun yerine

Response.AppendHeader ("İçerik-Disposition" bir

9

, "satır içi," + "Dosya adı =

kullanımı

Response.AddHeader (" içerik eğilim", "eki; filename = dosyanın gerçek içeriği gönderiyor nasıl