El mejor enfoque es crear un enlace simbólico como @SlateEntropy muy bien señalado en la respuesta a continuación . Para ayudar con esto, desde la versión 5.3, Laravel incluye un comando que hace que esto sea increíblemente fácil de hacer:
php artisan storage:link
Eso crea un enlace simbólico de public/storage
a storage/app/public
para ti y eso es todo. Ahora /storage/app/public
se puede acceder a cualquier archivo en un enlace como:
http://somedomain.com/storage/image.jpg
Si, por algún motivo, no puede crear enlaces simbólicos (tal vez está en un alojamiento compartido, etc.) o desea proteger algunos archivos detrás de alguna lógica de control de acceso, existe la alternativa de tener una ruta especial que lea y sirve la imagen. Por ejemplo, una ruta de cierre simple como esta:
Route::get('storage/{filename}', function ($filename)
{
$path = storage_path('public/' . $filename);
if (!File::exists($path)) {
abort(404);
}
$file = File::get($path);
$type = File::mimeType($path);
$response = Response::make($file, 200);
$response->header("Content-Type", $type);
return $response;
});
Ahora puede acceder a sus archivos tal como lo haría si tuviera un enlace simbólico:
http://somedomain.com/storage/image.jpg
Si está utilizando la Biblioteca de imágenes de intervención , puede usar su response
método integrado para hacer las cosas más concisas:
Route::get('storage/{filename}', function ($filename)
{
return Image::make(storage_path('public/' . $filename))->response();
});
ADVERTENCIA
Tenga en cuenta que al servir manualmente los archivos está incurriendo en una penalización de rendimiento , ya que está atravesando todo el ciclo de vida de la solicitud de Laravel para leer y enviar el contenido del archivo, que es considerablemente más lento que hacer que el servidor HTTP lo maneje.
public
directorio. De esta manera, evitará la sobrecarga de tener que componer una respuesta de imagen que el servidor HTTP pueda manejar mucho más rápido.Una opción sería crear un enlace simbólico entre una subcarpeta en su directorio de almacenamiento y el directorio público.
Por ejemplo
Este es también el método utilizado por Envoyer , un administrador de implementación creado por Taylor Otwell, el desarrollador de Laravel.
fuente
storage
públicamente, por lo general, los avatares no requieren ningún tipo de control de acceso. Si no se requiere seguridad, usar cualquier tipo de middleware o ruta es solo un golpe perdido para sus recursos. También vale la pena señalar que desde Laravel 5.2 existe un "disco" de archivo separado para archivos públicos ( laravel.com/docs/5.2/filesystem ) que utilizan enlaces simbólicos.De acuerdo con los documentos de Laravel 5.2, sus archivos de acceso público deben colocarse en el directorio
Para hacerlos accesibles desde la web, debe crear un enlace simbólico desde
public/storage
hastastorage/app/public
.Ahora puede crear en su vista una URL a los archivos usando el asistente de activos:
fuente
Si está en Windows, puede ejecutar este comando en cmd:
de: http://www.sevenforums.com/tutorials/278262-mklink-create-use-links-windows.html
fuente
En primer lugar, debe crear un enlace simbólico para el directorio de almacenamiento utilizando el comando artesanal
Luego, en cualquier vista, puede acceder a su imagen a través de url helper de esta manera.
fuente
Es bueno guardar todas las imágenes y documentos privados en el directorio de almacenamiento, entonces tendrá control total sobre el archivo ether, puede permitir que cierto tipo de usuario acceda al archivo o lo restrinja.
Haga una ruta / documentos y señale cualquier método de controlador:
Cuando golpees el
localhost:8000/docs
archivo se descargará si existe alguno.El archivo debe estar en el
root/storage/app/users/documents
directorio de acuerdo con el código anterior, esto se probóLaravel 5.4
.fuente
Si desea cargar una pequeña cantidad de imágenes privadas Puede codificar las imágenes en base64 y hacerlas eco
<img src="{{$image_data}}">
directamente en :Mencioné privado porque solo debe usar estos métodos si no desea almacenar imágenes accesibles públicamente a través de la URL, en su lugar, siempre debe usar la forma estándar (almacenamiento de enlaces / carpeta pública y servir imágenes con el servidor HTTP).
Tenga cuidado con la codificación para
base64()
tener dos desventajas importantes:fuente
Si está utilizando php, simplemente utilice la función de enlace simbólico php, como la siguiente:
symlink('/home/username/projectname/storage/app/public', '/home/username/public_html/storage')
cambie el nombre de usuario y el nombre del proyecto a los nombres correctos.
fuente
sin nombre del sitio
si desea agregar el nombre del sitio a este ejemplo para agregarlo a los felinos de la API JSON
fuente
Si eres como yo y de alguna manera tienes rutas de archivos completas (hice una coincidencia de patrón glob () en las fotos requeridas, así que terminé con rutas de archivos completas), y tu configuración de almacenamiento está bien vinculada (es decir, tus rutas tener la cadena
storage/app/public/
), entonces puedes usar mi pequeño truco sucio a continuación: p)fuente
Si el disco 'local' no funciona para usted, intente esto:
'default' => env('FILESYSTEM_DRIVER', 'public'),
a partirproject_folder/config/filesystem.php
php artisan config:clear
php artisan storage:link
Para obtener la URL de la imagen cargada, puede usar esto
Storage::url('iamge_name.jpg');
fuente