2011-05-05 24 views
6

Bir Android tablette (bir Motorola Xoom) kutu tarayıcısından özel bir asp.net sitemden PDF dosyası indirirken sorun yaşıyorum.Bir ASP.NET sitesinden bir Android 3.0 tarayıcısında dosya indirme

Bu dosyayı göndermek için Response.OutputStream.Write kullanıyorum çünkü dosya bir UNC yolundan okumak zorunda. Bu yöntem IE, Firefox, Safari ve iPad'de çalışır, ancak Xoom'daki tarayıcıda çalışmaz. Ancak, Firefox'u Xoom'a indirdiğimde, dosyayı iyi indirebildim.

Aşağıdaki başlıkları kullandığımı gösteren birkaç nokta buldum: Content-Type: application/octet-stream Content-Disposition: attachment; Dosya adı = "MyFileName.PDF"

Bunu şanssız denedim. Ayrıca İçerik-Türleri için uygulama/pdf ve uygulama/zorla indirme ve dosya adı, büyük harf, genişletilmiş küçük harf, çift tırnak, tek tırnak, tırnak, vb. çalışan bir şey bulmak için.

Ayrıca, dosyayı indirebileceğim Page_Load dosyasını indirmek için kodu çalıştırırsam, ancak bir geri gönderme yaparsam ve sonra kodu çalıştırırsam (dosyayı indirmek için bir bağlantı düğmesine tıklarsak)

Herkes OOTB Android 3.0 tarayıcısında özel C# kodu kullanarak bir dosyayı indirebiliyor mu?

+0

Ben benzer bir sorun yaşıyorum:

Bu kod bloğu bir dosya işleyicisi kullanılacak ne bir örnektir. Aynı sorun. Sorun, yalnızca UNC referansı yoluyla bir dosya indirirken oluşur. Dosyayı bir bayt [] olarak serileştirdikten sonra Response.BinaryWrite kullanıyoruz. Yerel bir dosya için iyi çalışıyor, ancak dosya proxy'sinden byteArray'i aldığımızda (read, UNC dizini) aniden "Download Fails" – theo

+0

PDF'yi bir Android emülatörü ile indirebiliyor musunuz? – kaitsu

+0

Web sunucusu gzip'd içerik gönderiyor mu? Bunu devre dışı bırakmayı ve herhangi bir değişiklik yapıp yapmadığını görmeyi deneyin. (Bazen yanlışlıkla çift kodlayabilir veya biraz farklı bir biçimde kodlayabilirsiniz ve bazı tarayıcılar diğerlerinden daha iyi işleyebilir.) –

cevap

0

Bunun neden olduğu konusunda hiçbir fikrim yok, ancak Page_Load bloğunun içine bir dosya indirebilirseniz, bir geçici çözüm, Page_Load bloğunun içinde indirme işlevini çağırdığınız yeri karşıdan yüklemek için ayrılmış bir sayfaya bağlanacaktır.

Bunu web sitenizin geri kalanıyla daha uyumlu hale getirmek için (gerekirse) farklı dosyaları indirmek için sayfaya farklı parametreler gönderebilir veya siteyi yalnızca Android tarayıcısında çalıştırıyorsanız bu sayfaya yönlendirebilirsiniz.

Kod örnekleri kısa bir süre içerisinde ekleyeceğim.

1

Bu eski ama durumda herkes bu konuda rastlar:

Kontrol bilinmeyen kaynaklar ayarları altında -> uygulamalar.

IIS sunucusunda MIME Türlerinde (uygulama/pdf) tanımlanmış PDF'niz olduğundan emin olun. Ayrıca, bir dosya işleyicisi kullanıyorsanız başlık bilgisini ayarlamanız gerekecektir. Ayrıca, bir dosya işleyicisi kullanıyorsanız başlık bilgisini ayarlamanız gerekecektir.

string dirpath = System.Configuration.ConfigurationManager.AppSettings["FilePath"]; 
string file = System.Configuration.ConfigurationManager.AppSettings["FileName"]; 

System.IO.FileInfo fi = new System.IO.FileInfo(dirpath + file); 
string contentlen = fi.Length.ToString(); 

context.Response.Buffer = true; 
context.Response.Clear(); 
context.Response.AddHeader("content-disposition", "attachment; filename=" + file); 
context.Response.AddHeader("content-length", contentlen); 
context.Response.ContentType = "application/pdf"; 

try 
{ 
    context.Response.WriteFile(dirpath + file); 
} 
catch (Exception) 
{ 
    context.Response.Redirect("Error.aspx"); 
} 
İlgili konular