欢迎光临 Rick 's BLOG
日志首页  | C# .Net编程  | 原创作品  | 生活点滴  | C\C++相关  | 多媒体相关※ERMP  | VB相关  | 其它运维与编程  |  留言簿
通过命令行下载windows的pdb符号文件 PHP中通过闭包函数绑定的方式访问类的私有成员
未知  在CodeIgniter4中实现文件下载,以及nginx实现上传文件夹名的重写
[ 发布日期:12个月前 (12-11) ]   [ 来自:本站原创 ] [分类:其它运维与编程]
为了网站安全,我们一般要将上传文件夹和url中的实际下载路径隔离开来。
现在一般的php开发框架的目录结构本身就是按这个原则设计的。

那么开发人员怎么处理文件的下载呢?
第一种方式是使用php框架的Controller来实现文件下载(这样性能和效率差)。
第二种方式是直接使用nginx来进行下载(性能和效率高,但缺少权限验证)。
第三种方式php框架的Controller来验证权限,然后通过nginx来直接下载文件。(折中的处理,两头兼顾)

1,第一种方式,直接利用php代码实现文件下载


CodeIgniter4 的框架中提供了相关功能的实现,我只需要进简单调用即可。
Response 的 download 方法
下面的代码实现内存数据作为文件下载:
[复制到剪贴板]

$data 'Here is some text!';
$name 'mytext.txt';
return 
$this->response->download($name$data);
 



$data是下载的实际数据, $name是提供可客户端的文件名。

下面的代码实现磁盘文件的直接下载:
[复制到剪贴板]

return $this->response->download('/path/to/photo.jpg'null);
 



将第二参数设置为null即可。 这样实际文件名也会默认发送给客户端。
安全起见,我们需要修改文件名:
[复制到剪贴板]

return $this->response->download('/path/to/photo.jpg'null)->setFileName('logo.jpg');
 



后面 setFileName 设置的文件名会实际发送给客户端。


2,第二种方式,直接利用nginx的路径配置,直接提供文件下载


例如:网站跟目录是  /var/www/public/
上传目录是 /var/www/writeable/uploads
      用户下载url是  https://www.rickw.cn/uploads/path-to-file
nginx配置如下(两种配置方式):
[复制到剪贴板]

location /uploads/{
      
root /var/www/writeable/;
     
   } 



[复制到剪贴板]

location /uploads/{
      
root /var/www/writeable/uploads/;
      
rewrite ^/uploads/(.*)$ /$break;
   } 



上面两种配置方式都可以,第一种比较简单。(但要求url路径uploads和文件夹路径uploads必须一样)
第二种方式更灵活。url路径名和文件名可以不一样。
例如为了安全起见,我们要隐藏实际上传文件夹名称。将实际文件名改为:rickuploads,
同时又要不改变url的路径。按如下配置即可:

location /uploads/{
      root /var/www/writeable/rickuploads/;
      rewrite ^/uploads/(.*)$ /$1 break;
   }

我们只需要修改 root对应的物理路径即可。



3,第三种方式,利用php验证权限,然后让nginx直接提供文件下载


这种方式功能上比较平衡。
除此之外还能实现下载链接保护,临时链接、链接有效期等特殊效果。
具体实现方式下回分解。

引用通告地址 (0):
复制引用地址https://www.rickw.cn/trackback/302
复制引用地址https://www.rickw.cn/trackback/302/GBK
[ 分类:其它运维与编程  | 查看:703 ]

暂时没有评论,快来发表一个评论吧。
发表评论
作者:   用户:[访客] 
评论:

表  情
禁止表情 | 禁止UBB | 禁止图片 | 识别链接
对不起,你没有权限上传附件!
验证:
 
PoweredBy R-Blog V1.00 © 2004-2024 WWW.RICKW.CN, Processed in second(s) , 7 queries    京ICP备17058477号-5