Blog Home  Yalcomania'n�n Yeri Feed your aggregator (RSS 2.0)  
Yalçın Uzun - Dosyaların browser'dan download edilemesini önlemek
Kişisel Blog
 
 Tuesday, June 05, 2007

Bir projemde şöyle bir senaryo ile karşılaştım.
Kullanıcı kendisi ile ilgili açılan bir bölüme, başkasının görmemesi gereken dosyaları upload etmesi gerekiyordu.
Aynı şekilde site yöneticisi de bu kişi adına oraya dosya atabilmeliydi. Ancak dediğim gibi bu dosyanın başkası tarafından görülmemesi çok önemliydi.

Response.redirect'le veya bir link vererek bu işi yapamazdım, çünkü browser'ın history'sinde kaldığı için aynı makinaya oturan bir başkası o linki tıkladığında dosyayı indirebilirdi.

İnternette bulduğum şu yöntem çok hoşuma gitti:


public class FileManager

{

    public static void DownloadFile(int FileId)

    {

 

        MyClass.Entity.File f = (MyClass.Entity.File)Facade.Dosya.GetById(FileId).File; //Burası önemsiz, dosya bilgileri
        //f.Name'de dosyanın GUID isimle kaydedilmiş hali var, OriginalName özelliğinde ise dosyanın orjinal adı var (a.jpg gibi)

        System.IO.FileStream fs= System.IO.File.Open(System.Web.HttpContext.Current.Server.MapPath(@"~/Files/"+f.Name),System.IO.FileMode.Open);

        byte[] bytes = new byte[fs.Length];

        fs.Read(bytes, 0, (int)fs.Length);

        fs.Close();

        System.Web.HttpContext.Current.Response.AddHeader("Content-disposition","attachment; filename="+f.OriginalName );

        System.Web.HttpContext.Current.Response.ContentType = "application/octet-stream";

        System.Web.HttpContext.Current.Response.BinaryWrite(bytes);

        System.Web.HttpContext.Current.Response.End();

    }

}

Tuesday, June 05, 2007 3:52:47 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]    | 
Copyright © 2008 Yalçın Uzun