Nasıl fiziksel yolunu maruz kalmadan online indirilebilir dosya hizmet ediyor?

8 Cevap

Ben indirmeden önce kayıt kullanıcı gerektiren belgeleri kadar hizmet ediyorum. : Kayıt ve giriş kere Şu anda, belgelere bağlantılar olarak görüntülenir

myurl.com/docs/mypdf.pdf

Yani belgeye fiziksel yolu böylece kayıtlı kullanıcılar kayıtsız kullanıcılar veya başka belgelere sonrası doğrudan bağlantılar ile doğrudan bağlantıları veremiyoruz gizli belgeye fiziksel yolunu tutmak için en iyi yöntem nedir oturum herkes maruz kalır?

EDIT: Ben sadece etiketleri için benim en sevdiğim dil birkaç seçti agnostik diliydi bir fikir arıyordu. Bu durumda fiili uygulama ASP klasik. Şu anda kullanıcı gerçek belge bir URL'ye yönlendirmek önce kaydedilir onaylar bir indirme sarıcı komut dosyası kullanıyorum. Ben sadece basitlik için benim soru içermiyordu.

8 Cevap

Bunu yapmayın. Bunun yerine belge ağacının dışında bir yere dosyaları tutmak ve sonra bir komut dosyası kullanarak onları erişilebilir yapmak (örneğin, php,. Net, ne olursa olsun)

The script can check if they are logged in, validate if they are allowed the file, and if so return it. The path they go to might look more like this... /download.php?file=mypdf.pdf

Çizgisinde bir şey ...

<?php
if (IsUserLoggedIn())
    readfile('/secret/path/to/file/mypdf.pdf');
?>

En iyi yolu olmayan bir web erişilebilir yolundan dosya yukarı okumak ve çıkış akışı için yazmaktır.

Bu kullanarak gibiydi php bir Tamam örnek göstermek gibiydi? Sadece php üstüne güvenlik denetimini eklemek ve yetkili değilse onları tekme.

http://www.higherpass.com/php/Tutorials/File-Download-Security/

Bunu yapmak için en iyi yolu belgeyi dışarıya kullanılabilir olmayan bir konuma okuyan bir php / asp veya serverside komut dosyası kullanmak için

Kullanıcı oturum eğer o dosya kontrol edebilir ve aynı zamanda fiziksel dosya yolunu gizleyebilirsiniz

böylece URL www.yourwebsite.com/file.php?file=image.png olacağını

file.php would verify that the user is logged in then it would read the file or redirect them to the login page

Ne yapmak istediğiniz iki şeyi yapan bir PHP sayfası oluşturun:

  1. istekte kullanıcı kimlik doğrulaması
  2. istemciye dosya akışı

Bu link akışı ile yardımcı olacaktır. Ve bu kod yardımcı olabilir:

header("Content-Disposition: attachment; filename=$name of pdf that you want to download");
header("Content-Type: application/pdf");
header("Content-Length: ".filesize("$location of pdf/$name of pdf that you want to download"));
header("Pragma: no-cache");
header("Expires: 0");
$fp=fopen("$location of pdf/$name of pdf that you want to download","r");
print fread($fp,filesize("$location of pdf/$name of pdf that you want to download"));
fclose($fp);
exit();

Bir tartışma gördüm here.

Ben klasik ASP birçok aylar önce benzer bir sorun vardı.

Webroot dışında bir dizine dosyaları tuttu.

Doğrulanması üzerine, ADODB.stream yoluyla dosya gönderdi, ve sonra ben doğru mime-tipi dizi vardı emin olmak için dosya uzantısını kontrol etti.

Eğer ASP.NET, ASP.NET MVC veya başka bir şey kullanıyorsanız eğer net değil. Ancak, bu yazı ...

http://stackoverflow.com/questions/730699/asp-net-mvc-how-do-i-code-for-pdf-downloads

... Programlama ASP.NET kullanarak kullanıcıya bir dosya dönmek için nasıl gösterir (soru ASP.NET yol gösterir, cevaplar MVC yol göstermek).

THis fiziksel dosyaları bir klasöre kullanıcıya aksi erişilebilir olmamak için izin verecek, ve vb kullanıcının kayıtlı olduğu sağlamak için belgeyi dönmeden önce doğrulama eklemek için izin verecek

Eğer ASP.NET MVC kullanmak için çok geç değil senin gelişiminde bir aşamada iseniz o zaman bunu. (Bir dosya kadar hizmet) bu senaryo bir-liner olur, ve pek çok başka şeyler (özellikle app test) daha kolay olacaktır.

IIS joker erişime ihtiyaç olmamasına rağmen,. Net bir IHttpHandler kullanabilirsiniz. Bir oturum tabanlı işleyicisi kullanabilirsiniz.

  1. Erişim kontrolü için bir komut dosyası kullan

    Kullanıcı dosya erişim hakkı olup olmadığını denetler myurl.com / file.php? Docs / mypdf.pdf gibi bir komut dosyası yapın. Komut web görünmez bir yerden dosyayı almak olacaktır.

  2. (İsteğe bağlı) adresler güzel görünmesi için mod_rewrite kullanın ve file.php komut için kullanıcıyı yönlendirir. Gibi bir şey:

    RewriteCond docs /% {} REQUEST_FILENAME!-F

    RewriteRule ^ (. *) $ File.php / $ 1 [QSA, L]

    Bu / docs / mypdf.pdf için / file.php? Docs / mypdf.pdf yönlendirmek ancak kullanıcı için güzel bakacağız.