[ mikelins @ 02.08.2007. 09:41 ] @
U web aplikaciji mi je potrebno da klikom na Button download-ujem fajl sa mogucnoscu izbora gde da ga snimim. Imam URL fajla koji zelim da download-ujem.
hvala
[ dusty @ 02.08.2007. 09:49 ] @
U Response spostavi property ContentType na "octet/stream", i dodaj heder Content-Disposition da je "attachment;filename=ime_tvog_fajla" preko metode AddHeader. Posle sa WriteFile metodom saljes fajl.
[ bunker @ 02.08.2007. 10:44 ] @
Da se ne bi mnogo pisalo, bolje je ovako:

u while petlji se podaci baferuju, u suprotnom bi imao gresku sa vecim fajlovima koje prevuces. Ovo bi trebalo da ti zavrsi posao. Mozes da iskljucis static i da dodas ivent hendlere kako bi izveo neki progres bar (ako skidas velike fajlove bilo bi korisno)

Code:

        public static MemoryStream HttpDownload(string p_URL)
        {
            HttpWebRequest  request = null;
            HttpWebResponse response = null;
            Stream responseStream = null; 
            try 
            {
                request = (HttpWebRequest) WebRequest.Create(p_URL);
                request.Credentials = CredentialCache.DefaultCredentials;
                response = (HttpWebResponse) request.GetResponse();
                responseStream = response.GetResponseStream();
            
                byte[] fileSize = new byte[response.ContentLength];
                int bufferSize = 4096;
                byte[] buffer = new byte[bufferSize];

                int targetBufferIndex = 0;
                while(true)
                {
                    int n = responseStream.Read(buffer, 0, bufferSize);
                    if (n == 0)    break;
                    Array.Copy(buffer, 0, fileSize, targetBufferIndex, n);
                    targetBufferIndex += n;
                }
                return new MemoryStream(fileSize, 0, fileSize.Length);
            }
            catch 
            {
                throw;
            }
            finally
            {
                if(null != responseStream) responseStream.Close();
                if(null != response) response.Close();
                if(null != request) request.Abort();
            }
        }