我的Laravel应用程序,它是一个内部CDN与图像的大量与生活在其他静态文件设置泊坞窗./storage/app,都private和public。我希望使用 GitLab CI 构建 Docker 映像,我的问题是在不覆盖存储内容的情况下构建它的正确方法是什么?这些内容不存在于 repo 中。
对此,我有两个想法:
创建从/var/www/html项目到项目的符号链接./storage/app/public 和从/some_other_folder项目到项目的符号链接./storage/app/private。在这种情况下,问题是我是否可以将文件写入文件夹的软链接,如果可以,该文件是否真的出现在符号链接的原始文件夹中?如果所有这些都适用,我也很感兴趣,如果我真的可以创建一个指向 Docker 容器内文件夹的符号链接......
设置 Laravel Storage 将文件写入外部而不是文件夹内的文件夹。在这种情况下,问题是我应该怎么配置Laravel和泊坞窗允许文件写入容器外,这使得它们成为/var/www/html了公众和/some_other_folder对私人?
任何一种想法是否正确/好/甚至可以实现?或者有没有其他解决问题的方法?
我知道使用filesystems.php创建磁盘,目前正在使用它,配置了约20个磁盘。
我对此有一个新问题,我目前正在尝试为每个磁盘加上一个字符串前缀。问题是,在php artisan config:cache运行时会保存路径,但是我需要在运行时更改它们,例如n,对于User,Sergio它需要附加Sergio/到以下磁盘上:
//filesystems.php
'random' => [
'driver' => 'local',
'root' => storage_path('app/random'),
],
Run Code Online (Sandbox Code Playgroud)
然后
Storage::disk("random")->getDriver()->getAdapter()->getPathPrefix();
//outputs /var/www/html/project/storage/app/random
Run Code Online (Sandbox Code Playgroud)
并且目标是在中间件中设置配置,例如,我目前正在像这样设置帐篷数据库
//Middleware
Config::set('database.connections.tenant.database', "Sergio");
DB::reconnect('tenant');
Run Code Online (Sandbox Code Playgroud)
我目前可以正确设置路径
Config::set('filesystems.disks.random.root',storage_path('app/Sergio/random'));
Run Code Online (Sandbox Code Playgroud)
但是我担心,因为如果在该行之前我尝试到达该路径,那么存储将初始路径保存在内存中,而不是在更改后重新获取它。
例如。无需任何中间件就能做到这一点。
$fullPath1 = Storage::disk("random")->getDriver()->getAdapter()->getPathPrefix();
Config::set('filesystems.disks.random.root',storage_path('app/Sergio/random'));
$fullPath2 = Storage::disk("random")->getDriver()->getAdapter()->getPathPrefix();
Run Code Online (Sandbox Code Playgroud)
打算发生的事情是$fullPath1将输出初始路径,/var/www/html/project/storage/app/random然后$fullPath2将其输出/var/www/html/project/storage/app/Sergio/random
有什么方法可以让Storage知道我已经更改了磁盘的本地路径?
如何使用Laravel的filesytem(文件存储)方法存储base64图像?
例如,我可以像这样解码base64图像:
base64_decode($encoded_image);
Run Code Online (Sandbox Code Playgroud)
但是Laravel的所有文件存储方法都可以接受Illuminate\Http\File或Illuminate\Http\UploadedFile实例。
所以我想我必须将base64图像(或解码的base64图像)转换为Illuminate\Http\File或Illuminate\Http\UploadedFile,但是如何?
我不知道为什么我无法使用以下代码删除 Laravel 中的文件:
$path = storage_path('app/identification_cards') . '/' . $filename;
Storage::delete($path)
Run Code Online (Sandbox Code Playgroud)
该命令执行时没有错误,并返回 true。
我检查的内容:
- 路径正确。如果我在 bash 终端中使用相同的确切路径(使用“rm”命令),文件将被删除;
- 该文件确实具有 777 权限。
我不知道如何解决。
谢谢。
我正在尝试在VueJs前端和Laravel后端构建一个小型应用程序,我将管理部分中aws-s3的文件上传到我的同时上传我将该文件的链接存储在数据库中的文件。每个操作都由 api 调用维护,现在我想为我的最终用户提供这些下载的选项,所以我正在进行 axios 调用,如下所示:
downloadPDF(docs){
const documents = {
document: docs
}
axios.post('api/documents-download', documents, {headers: getHeader()}).then(response => {
if(response.status === 200)
{
console.log('Downloaded')
}
})
},
Run Code Online (Sandbox Code Playgroud)
在我的控制器中,我有这样的事情:
public function download(Request $request)
{
$headers = [
'Content-Type' => 'application/pdf',
'Content-Description' => 'File Transfer',
'Content-Disposition' => "attachment; filename=filename.pdf",
];
return response()->download($request->document, 'filename.pdf', $headers);
}
Run Code Online (Sandbox Code Playgroud)
但它抛出了我的错误:
这个文件显然存在并公开,因为你可以在上面看到 url 显示文档为链接。
帮我解决这个问题。谢谢
我想要实现的是从 URL 中删除 /storage ,以便最终它是www.example.com/images/x.jpg而不是默认的www.example.com/storage/x.jpg.
我试过像这样从urlin 中删除 /storage config/filesystems.php:
// Original
'public' => [
'driver' => 'local',
'root' => storage_path('app/public'),
'url' => env('APP_URL') . '/storage',
'visibility' => 'public',
],
// Modified
'public' => [
'driver' => 'local',
'root' => storage_path('app/public'),
'url' => env('APP_URL'), // <-- changed
'visibility' => 'public',
],
Run Code Online (Sandbox Code Playgroud)
但它不起作用。我认为问题是如果没有前缀,它将被视为公共文件夹中的文件。
是否有可能实现我想要实现的目标?
我需要帮助了解 Laravel 的文件存储系统。我正在创建一个应用程序,我需要在其中上传用户的驾驶执照照片。这显然是敏感信息。除非管理员正在查看它,否则我想将此图像远离互联网。我的理解是,我必须将内容保存到 storage>app>public 中的 public 目录,并创建一个指向 public>storage 文件夹的符号链接。我已经完成了,并且工作正常。我保存了数据库的路径,程序可以显示它,但是如果可以避免的话,我不希望公共文件夹中的内容。
有什么方法可以将图像/文件保存到存储系统中的私有文件夹中,然后通过视图访问它?如果我这样做,它是否会保持该图像“私有”,以便它不会存储在某个不在“公共”文件夹中的缓存中?符号链接是否以我想要的方式保护存储文件夹中的文件,还是真的让所有文件都可供公众使用?
任何帮助理解这一点将不胜感激。
我无法访问保存到存储文件夹的文件。我能够上传,文件,保存文件。例如,如果我运行 size 方法,它会获取上传图像的文件大小,但是在显示文件时,我会收到 403 错误。我使用 laravel artisan 命令创建符号链接,我尝试手动创建符号链接。我已经检查以验证以下符号链接是否在我的 apache 配置中,我可以从 shell cd 到它,权限是 777(我有 755,但在试图弄清楚出了什么问题时,我将其更改为 777)符号链接的所有权和里面的文件与公共目录中的所有其他文件都是相同的用户和组。
我太累了,所以也许我只是错过了一些明显的东西,但我一生都无法弄清楚出了什么问题。该文件显然存在,其可见性设置为“公开”。有什么理由可以写目录但不能显示保存在那里的图像吗?
编辑1: 网络
是基本结构,在 public 里面有一个符号链接指向 storage/app/public
我的存储文件夹配置的文件系统是:
'public' => [
'driver' => 'local',
'root' => storage_path('app/public'),
'url' => env('APP_URL').'/storage',
'visibility' => 'public',
],
Run Code Online (Sandbox Code Playgroud)
在这一点上,我还没有从基本的 laravel 安装中真正编辑过任何东西。我确实读过其他有类似问题的人,说他们的问题是他们不允许访问文档根目录之外的目录。所以他们只是让所有上传的文件都转到他们的公共文件夹,而不是使用存储文件夹。我确实将文档根目录设置为公用文件夹。这可能是个问题吗?(如果需要,我可以编辑我的 apache 文件)
我知道我们可以使用 Storage::delete() 或 File::delete 来删除 laravel 中的文件夹和/或文件,但这似乎不适用于直接在存储下的文件夹,我的意思是例如 storage/tmp 。它仅适用于存储/应用程序。如何处理?
if (file_exists( storage_path() . '/tmp/file1'.'.pdf' )) {
File::delete(storage_path() . '/tmp/file1'.'.pdf') );
}
Run Code Online (Sandbox Code Playgroud)
谢谢
在 Windows 上我有 Xampp。我的应用程序位于 Anuglar 和 Laravel 8 中,我将文件添加到存储文件夹中的 public 文件夹中。配置在filesystem.php:
'public' => [
'driver' => 'local',
'root' => storage_path('app/public'),
'url' => env('APP_URL').'/storage',
'visibility' => 'public',
],
Run Code Online (Sandbox Code Playgroud)
在.env文件中:
APP_URL=http://localhost:8082/prftbx-crm-api/public
Run Code Online (Sandbox Code Playgroud)
公共文件夹中的文件:
Directory of C:\xampp\htdocs\crm-api\storage\app\public
06/25/2021 11:01 AM <DIR> .
06/25/2021 11:01 AM <DIR> ..
04/26/2021 10:57 PM 14 .gitignore
06/25/2021 11:01 AM 510 381787c3ad1442cc882ee427e93af805.txt
Run Code Online (Sandbox Code Playgroud)
在 Laravel 中,我使用以下方法返回 url:
$fileDTO->filePath = Storage::url($fileEntity->file_name);
Run Code Online (Sandbox Code Playgroud)
鉴于我有地址:
/storage/381787c3ad1442cc882ee427e93af805.txt
Run Code Online (Sandbox Code Playgroud)
当我在浏览器中输入 url 时:
http://localhost:8082/crm-api/public/storage/381787c3ad1442cc882ee427e93af805.txt
Run Code Online (Sandbox Code Playgroud)
我明白了404,找不到文件
laravel-storage ×10
laravel ×7
php ×5
laravel-5 ×3
apache ×1
base64 ×1
docker ×1
file ×1
file-upload ×1
filesystems ×1
laravel-5.2 ×1
laravel-5.6 ×1
laravel-5.7 ×1