Forum
Asp.net Gridview üzerinde Linkbutona baglı Download metodum var FTP den dosya indiriyor 50 MB üzeri oldugunda indirme çok gec baslıyor .
FtpWebResponse response = (FtpWebResponse)request.GetResponse();
MemoryStream stream = new MemoryStream();
stream.Position = 0;
response.GetResponseStream().CopyTo(Response.OutputStream);
Response.ContentType = "application/force-download";
Response.AddHeader("content-disposition", "attachment;filename=" + fileName);
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.BinaryWrite(stream.ToArray());
this.Response.End();
Breakpoint atdıgımda aşağıdaki blokda bekledigini test etdim .
response.GetResponseStream().CopyTo(Response.OutputStream);
Async method kullanmayı denedınız mı ?
public void DownloadFileAsync( Uri address, string fileName, object userToken )
https://msdn.microsoft.com/en-us/library/ms144197%28v=vs.110%29.aspx
saygılarımla
ProfectSoft Yazılım ve Danışmanlık Hizmetleri
LogPusher & Bifyou E-Commerce System
www.profectsoft.com
Hocam baktım ama kendime uygulayamadım ,Birde genelde HTTP üzerinden PDF vs. gibi küçük dosyalar indiren projeler vardı ,Yukarıdaki metod sadece 50 MB üzeri dosyalarda indirme işlemini geç başlatıyor ama başladıkdan sonra normal hızda iniyor .
merhaba buffer yöntemi ile denediniz mi bir örnek
DateTime startTime = DateTime.UtcNow;
WebRequest request = WebRequest.Create("http://www.example.com/largefile");
WebResponse response = request.GetResponse();
using (Stream responseStream = response.GetResponseStream()) {
using (Stream fileStream = File.OpenWrite(@"c:\temp\largefile")) {
byte[] buffer = new byte[4096];
int bytesRead = responseStream.Read(buffer, 0, 4096);
while (bytesRead > 0) {
fileStream.Write(buffer, 0, bytesRead);
DateTime nowTime = DateTime.UtcNow;
if ((nowTime - startTime).TotalMinutes > 5) {
throw new ApplicationException(
"Download timed out");
}
bytesRead = responseStream.Read(buffer, 0, 4096);
}
}
}
ProfectSoft Yazılım ve Danışmanlık Hizmetleri
LogPusher & Bifyou E-Commerce System
www.profectsoft.com
Hocam yukaıdaki Metod ile webde sayfası üzerinden host da olan bi dosyayı kendi lokal diskime kaydedilemez diye biliyorum , yani sizin verdiginiz c:\temp aslında hostdaki sunucunu c:\temp klasoru olurmu yada kendi klasorum olursada access denied hatası alırmıyım ?
merhaba yukarıdakı kod ornektı yazabılırsınız c:\temp klasoru acarsınız ııs uzerıne ona yazma yetkısı verırsınız vb. ama asıl sız o satırı
string physicalPath = HttpContext.Current.Request.MapPath(appPath);
gıbı kendı upload yada donwload kasorunuz
yapmalasınız yonetım acısından dogru olan bu. kendi klasorunuz olursa access deneid alabilirsiniz en azından sunucuda local makınanızda local admin olabiirsiniz.
Bunun ıcın ızınlerı kontrol etmelisiniz.
ProfectSoft Yazılım ve Danışmanlık Hizmetleri
LogPusher & Bifyou E-Commerce System
www.profectsoft.com
Hocam zaten burdaki amac sunucuda FTP olan dosyayı kişinin kendi bilgisayarına indirmesi , Yoksa sunucudaki A klasorundeki yine Sunucudaki B klasorune indirmenin bi anlamı yok , Benim ilk yazdıgım Metodu biraz bakıcam hangi Stream Metodu performans için uygun , Tşkler .