就像之前说过blob的那样,是可行的方式,但是,正如SanHolo所指出的那样,它并不是真正的性能,你最终会遇到问题,因为你的数据库可以真正快速增长!
为什么不在数据库上索引文件名并将文件存储在服务器上?
不允许这样的事情的主要原因是安全问题.如果您真的试图通过不允许所有用户查看或获取内容来覆盖您的基础,那么您有两种选择.
选项A)为文件提供一个独特的,不可识别的名称,如Flickr.该文件的名称包含两个哈希值.用户哈希和文件哈希.第二个哈希是秘密的,你可以得到它的唯一方法是通过反复试验.看看我在Flickr上的这个文件.用户保护(只有家人可以看到)但你可以很好地访问它,因为URL本身可以起到保护作用:http://farm2.static.flickr.com/1399/862145282_bf83f25865_b.jpg,即使你他们随机试图生成哈希并找到一个有效的哈希,它将被匿名隐藏,因为你不知道它是谁.
选项B)使用服务器端thecnology来限制访问.这种方法对服务器来说更安全但更昂贵.您将设置一个脚本,该脚本将允许/拒绝基于session_permissions或类似的东西访问该文件.查看以下通过访问以下内容调用的代码:
http://yourserver.com/getprotectedfile.php?filename=213333.jpeg
session_start();
// logic to verify the user is ok
if($_SESSION['user_access']!=true) {
exit('user not allowed here');
// WATCHOUT! THIS IS NOT SECURE! EXAMPLE ONLY.
// on a production site you have to be sure that $filename will not point to a system file
$filename = $_GET['filename'];
// gets the file and outputs it to the user
header('Content-type: image/jpeg');
header('Content-Length: '.filesize($filename));
readfile($filename);
Run Code Online (Sandbox Code Playgroud)