我已经构建了一个laravel应用程序,我在public/files
目录下有一些文件。如果我将此链接提供给其他人,例如下载链接,他们就有机会知道我的目录..
假设链接我必须提供下载链接
www.abc.com/files/45454553535.zip
但我不想让用户知道它存在于files目录中。那么如何隐藏目录呢?
答案 0 :(得分:0)
将您的文件保存在storage
目录中。这样,您就可以通过代码将文件提供给用户。
答案 1 :(得分:0)
我不知道这是否会起作用,但会给你一个想法。创建一个像这样的php文件:
header('Content-Type: application/zip');
$a=file_get_contents(file.zip)
echo $a;
从该用户不知道从哪里获取内容。
答案 2 :(得分:0)
试试这个。
public function getDownload()
{
$filename='45454553535.zip'
$file= public_path(). "/files/".$filename;
$headers = array(
'Content-Type: application/zip',
);
return Response::download($file, $filename, $headers);
}
“。files / 45454553535.zip”将不起作用,因为您必须提供完整的物理路径。
2016年5月20日更新
Laravel 5,5.1,5.2或5. *用户可以使用以下方法代替Response facade。但是,我之前的回答适用于Laravel 4或5。
返回响应() - >下载($ file,$ filename,$ headers);
答案 3 :(得分:0)
您可以创建一个控制器和路线。
Route::get('files/{filename}', [
'as' => 'file.get',
'uses' => 'FileController@get',
]);
控制器应检查您的正确目录。尽量将文件保存在存储路径中,而不是公开。
class FileController extends Controller
{
private $path;
public function __construct()
{
$path = storage_path()
. '/your-valid-directory/';
}
public function get($filename)
{
$file_path = $this->path
. filter_var($filename, FILTER_SANITIZE_STRING);
if (file_exists($file_path) && is_readable($file_path)) {
return response(file_get_contents($file_path), 200, [
'Content-Type: application/zip',
]);
} else {
abort(404);
}
}
}
现在您可以通过以下方式访问特定文件:
{{ route('file.get', ['filename' => '45454553535.zip') }}
此操作生成的链接如下所示: your-domain.com/files/45454553535.zip 。 :)
无论如何,在我看来 - 将来只需使用特定的标题,目录制作文件工厂。
祝你好运!