将使用此链接通过-6ren">
gpt4 book ai didi

javascript - Laravel获取图像的文件内容但在生产环境上不起作用

转载 作者:行者123 更新时间:2023-11-28 03:22:39 27 4
gpt4 key购买 nike

我的代码用于本地主机开发

<img class="img-fluid rounded-circle" src="{{ url('image?type=user&file='.Auth::user()->picture_file.'&mime='.Auth::user()->picture_mime) }}" alt="Image Description">

将使用此链接通过 get 方法访问 imageController image?type=user&file=USER000053.png&mime=image/png

class ImageController extends BaseController
{
public function get(Request $request){
$file=Storage::disk($request->type)->get($request->file);
return response($file,200)->header('content-Type',$request->mime);
}
}

下面是我的filesystem.php配置文件

'user' => [
'driver' => 'local',
'root' => storage_path('app/user'),
'url' => env('APP_URL').'/storage',
'visibility' => 'public',
],

上面的代码在本地主机上运行良好。但是当我们尝试推送到生产服务器(centos os)时,该代码将无法工作。它只是返回一个损坏图像。

我们已经尝试过

  1. [检查]确保存储和温度可访问。 chmod 755。即使我们已经尝试过 777
  2. [检查] chown 到用户 apache.apache
  3. [检查] 设置 selinux 许可模式
  4. [检查]我们已确保该文件已存在

    $file_exists = Storage::disk($request->type)->exists($request->file);

    上面的代码返回true

  5. [检查]尝试下面的代码

    $response = Response::make($file, 200);
    $response->header('Content-Type', $request->mime);
    return $response;

    还是不行

  6. 尝试创建符号链接(symbolic link)

    php artisan storage:link

    它在 public 文件夹上创建符号链接(symbolic link),但仍然无法工作

  7. 尝试下载但仍然无法运行

     return response()->download(storage_path('app/' . $request->type . "/" . $request->file));

我在 GCP 的 Centos 7 环境上运行。任何想法都会帮助我。谢谢

更新1这是我们服务器的结果

enter image description here

更新2我已经在服务器上检查过该图像,它很好并且可以读取

更新3

我们已经这样做了

$img = file_get_contents(public_path("storage/user/" . $request->file));
return response($img)->header('Content-type','image/png');

仍然无法工作

更新4我们在 public 文件夹 上创建自己的符号链接(symbolic link),如下所示存储 ->/var/www/html/*****/storage/app/

仍然无法工作

更新5我通过浏览器直接访问文件,它会显示图片。

更新6已经在 env 文件上设置了 FILESYSTEM_DRIVER=localFILESYSTEM_DRIVER=user 但仍然不起作用

更新7

文件系统.php

 'disks' => [

'local' => [
'driver' => 'local',
'root' => storage_path('app'),
],

'public' => [
'driver' => 'local',
'root' => storage_path('app/public'),
'url' => env('APP_URL').'/storage',
'visibility' => 'public',
],

'calculate_disk' => [
'driver' => 'local',
'root' => storage_path('app/calculate'),
'url' => env('APP_URL').'/storage',
'visibility' => 'public',
],

'user' => [
'driver' => 'local',
'root' => storage_path('app/user'),
'url' => env('APP_URL').'/storage',
'visibility' => 'public',
],

'invoice' => [
'driver' => 'local',
'root' => storage_path('app/invoice'),
'url' => env('APP_URL').'/storage',
'visibility' => 'public',
],

's3' => [
'driver' => 's3',
'key' => env('AWS_ACCESS_KEY_ID'),
'secret' => env('AWS_SECRET_ACCESS_KEY'),
'region' => env('AWS_DEFAULT_REGION'),
'bucket' => env('AWS_BUCKET'),
'url' => env('AWS_URL'),
],

],

web.php

Route::get('/image', 'ImageController@get');

更新8

在研究了FileSystemDriver一段时间后,我对链接到localhost而不是我们的url的下面的url值感到好奇。有什么想法吗?

FilesystemAdapter {#479 ▼
#driver: Filesystem {#482 ▼
#adapter: Local {#475 ▼
#pathSeparator: "/"
#permissionMap: array:2 [▼
"file" => array:2 [▼
"public" => 420
"private" => 384
]
"dir" => array:2 [▼
"public" => 493
"private" => 448
]
]
#writeFlags: 2
-linkHandling: 2
#pathPrefix: "/var/www/html/***/storage/app/user/"
}
#plugins: []
#config: Config {#477 ▼
#settings: array:2 [▼
"url" => "http://localhost/storage"
"visibility" => "public"
]
#fallback: null
}
}
}

最佳答案

只需在响应文件之前添加 ob_get_clean(); 即可。

它将清理所有缓冲区并返回内容以显示图像。

关于javascript - Laravel获取图像的文件内容但在生产环境上不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58980229/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com