HTTP yanıtında bir CSV dosyası göndermem gerekiyor. Çıkış yanıtını CSV biçimi olarak nasıl ayarlayabilirim?
Bu çalışmıyor:
Response.ContentType = "application/CSV";
HTTP yanıtında bir CSV dosyası göndermem gerekiyor. Çıkış yanıtını CSV biçimi olarak nasıl ayarlayabilirim?
Bu çalışmıyor:
Response.ContentType = "application/CSV";
Yanıtlar:
Kullanmak text/csv
en uygun tiptir.
Ayrıca Content-Disposition
yanıta bir başlık eklemeyi de düşünmelisiniz . Genellikle bir metin / csv, Internet Explorer tarafından doğrudan barındırılan bir Excel örneğine yüklenir. Bu istenen bir sonuç olabilir veya olmayabilir.
Response.AddHeader("Content-Disposition", "attachment;filename=myfilename.csv");
Yukarıdaki, istediğiniz gibi olabilecek bir dosya "Farklı kaydet" iletişim kutusunun görüntülenmesine neden olur.
CSV'nin MIME tipi RFC 4180'e göre text / csv'dir .
Yıllar boyunca bunun için bildiğim tüm tarayıcılarda mükemmel bir şekilde çalışan mükemmel bir başlık seti
// these headers avoid IE problems when using https:
// see http://support.microsoft.com/kb/812935
header("Cache-Control: must-revalidate");
header("Pragma: must-revalidate");
header("Content-type: application/vnd.ms-excel");
header("Content-disposition: attachment; filename=$filename.csv");
Bu diğer mime türlerinden birini deneyin (buradan: http://filext.com/file-extension/CSV )
Ayrıca, mime tipi büyük / küçük harfe duyarlı olabilir ...
Sadece böyle kullan
Response.Clear();
Response.ContentType = "application/CSV";
Response.AddHeader("content-disposition", "attachment; filename=\"" + filename + ".csv\"");
Response.Write(t.ToString());
Response.End();
return new EmptyResult()
, dosya adının yapışmasını sağlamak için denetleyici yöntemini sonlandırmanız gerekir . Aksi takdirde IE dosyayı olarak deneyecek ve kaydedecektir ActionName.htm
.
ASP.net MVC'de bir FileContentResult
ve File
yöntemini kullanabilirsiniz:
public FileContentResult DownloadManifest() {
byte[] csvData = getCsvData();
return File(csvData, "text/csv", "filename.csv");
}
IE ile ilgili sorun, geri dönüş verisini kokluyor ve hangi içerik türü gönderildiğini düşündüğü konusunda kendi fikrini oluşturuyor. Bunun neden olduğu, veri dosyalarının sıkıştırılmasını kullandığınız için metin dosyaları için daima bir saveAs iletişim kutusunu açmak gibi bir dizi yan etki vardır. Çözüm (php kodunda) ......
header('X-Content-Type-Options: nosniff');
İçerik türünü ve içerik düzenini yukarıda açıklandığı gibi ayarlamak, farklı tarayıcılarda çok çeşitli sonuçlar verir:
IE8: İstediğiniz gibi Kaydet iletişim kutusu ve varsayılan uygulama olarak Excel. % 100 iyi.
Firefox: SaveAs iletişim kutusu görünür, ancak Firefox'un bir e-tablo olduğu hakkında hiçbir fikri yoktur. Visual Studio ile açılmasını önerir! % 50 iyi
Chrome: ipuçları tamamen yok sayılır. CSV verileri tarayıcıda gösterilir. % 0 iyi.
Tabii ki tüm bu durumlarda mime / uygulama eşleştirmeleri özelleştirme olmadan, onlar kutudan çıkarken tarayıcılar atıfta bulunuyorum.
C # MVC 4.5 için aşağıdakileri yapmanız gerekir:
Response.Clear();
Response.ContentType = "application/CSV";
Response.AddHeader("content-disposition", "attachment; filename=\"" + fileName + ".csv\"");
Response.Write(dataNeedToPrint);
Response.End();
return new EmptyResult(); //this line is important else it will not work.