2012-06-19 23 views
5

Tüm tarayıcılarda çok büyük bir sorun yaşıyorum.HTM olarak CSV yüklemeleri

İstemcilerin ihtiyaç duydukları ayrıntıları içeren bir csv dosyası indirebilecekleri bir sitem var.

Yaşadığım sorun, csv dosyasının uzantı içermeyen veya htm dosyası olarak indirilmesidir.

Kodda .csv ile dosya adını belirtiyorum, sunucudaki dosya da .csv'dir. Ben context.Response.ContentType = "text/html"; ve context.Response.ContentType = "application/octet-stream"; çalıştılar

context.Response.Buffer = true; 
context.Response.Clear(); 
context.Response.ClearHeaders();      
context.Response.ContentType = "text/csv"; 
context.Response.AppendHeader("Content-Disposition", @"attachment,  
    filename=" + ((string)Path.GetFileName(downloadFilePath))); 
context.Response.WriteFile(downloadFilePath); 
context.Response.Flush(); 
context.Response.Close(); 

şöyle

kodudur.

IIS6'da çalışıyor.

Buna neyin neden olabileceğini bilen var mı?

+0

Hangi tarayıcıda? –

+0

@NicholasMurray _Bu tarayıcıda büyük bir sorun yaşıyorum. – EaterOfCode

+1

@EaterOfCorpses - ve 'tüm tarayıcılardan' hangi tarayıcıları bulabilirsin? IE 5, Firefox 1? –

cevap

0

Tamam ben çalışmış.

bunun nedeni, dosya adının içinde boşluk olması nedeniyle, dosya adını, boşlukta kesilmeyecek şekilde kapatmam gerekiyor.

Yardımlarınız için teşekkür ederiz.

2

, senin verbatim string literal Kaynağınıza tek satırda varsayarsak bir ; ile Content-Disposition başlığında , değiştirilmesi denediniz mi? Bulduğum örnekler her zaman orada bir yarım kolon kullanır.

Ayrıca özel karakterler gelen başlığı korumak için dosya sonuna tırnak işareti kullanmak daha güvenli olabilir: dosyalar CSV olarak indirilmesi değil neden

context.Response.AppendHeader(
    "Content-Disposition", 
    string.Format(
     "attachment; filename=\"{0}\"", 
     Path.GetFileName(downloadFilePath))); 
+1

Evet, bu, ilgili RFC'nin 19.5.1 bölümüyle uyumlu hale getirebilir: http://www.w3.org/Protocols/rfc2616/rfc2616-sec19.html –

+0

OP'nin örneğinde, sözdizimine hiçbir gereklilik gerekmediğinden Aslında bunun çok satırlı bir dize olduğunu sanıyorum. Btw, kaçış karakteri, verbatim değişmezleriyle çalışmaz, bu değişkeni "@" eki olarak değiştirmeyi deneyin; filename = "" {0} "" "veya daha da iyisi,' @ 'önekini kaldırın. – Groo

+0

ben deneyeyim ve benim sorudan soruları Tüm tarayıcılar - FF, IE ve Chrome context.Response.AppendHeader ("Content-Disposition", @ "eki; filename =" + ((string) Path.GetFileName (downloadFilePath))); – user1466569