我正在做一个基于 laravel+lumen 的项目。我正在进行主要设置,它将基于 Laravel 5.2 中的 Web 和用于处理来自移动设备的 api 请求的子域 (api.domain.com)。用户将从移动应用程序和网络上传大量文件(主要是图像)。它们将存储在不公开可见的存储文件夹中。但是接下来有两个问题。
- 如何在两个设置之间共享存储文件夹?我正在考虑将文件保存在单独的服务器上以解决此问题。
- 由于存储文件夹不会公开可见,我如何检索文件?
我正在做一个基于 laravel+lumen 的项目。我正在进行主要设置,它将基于 Laravel 5.2 中的 Web 和用于处理来自移动设备的 api 请求的子域 (api.domain.com)。用户将从移动应用程序和网络上传大量文件(主要是图像)。它们将存储在不公开可见的存储文件夹中。但是接下来有两个问题。
你可以有一个特殊的路径来读取和返回图像。例如这样一个简单的关闭路径:有两种方法取决于您的文件的隐私,您可以使用以下任何一种。
1)使用专用控制器提供图像:
控制器:
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Storage;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Response;
class FileController extends Controller
{
public function __construct()
{
$this->middleware('auth');
}
public static function getFile($fileName){
$path = storage_path() . '/' . $filename;
if(File::exists($path)){
return Response::download($path);
}
else
abort(404);
}
}
路线
Route::get('/file/{file_name}','FileController@getFile');
现在您可以访问一个名为 let's say abc.jpg
from this url的文件/file/abc.jpg
2) 使用符号链接
如果您的文件不需要任何身份验证或任何处理,则此方法对于 Controller 来说是最好的和更快捷
的 在您的存储目录中的子文件夹和公共目录。
在linux中,您可以使用以下命令:
ln -s /path_to_storage_directory/file /path_to_public_directory/files
在 Windows 中使用以下命令:
mklink /j /path_to_storage_directory/file /path_to_public_directory/files
在 Windows 中,如果您不想使用 CMD,这是一个用于创建符号链接的独立应用程序:Symlinker