Filamentphp/Minio 无法使用 FileUpload 组件将文件保存到存储桶的问题

问题描述 投票:0回答:1

我对 FileUpload 组件有疑问:

无法检索以下位置的文件的 mime_type:livewire-tmp/3gV8mEXfLVdtzdvzKRuiGxHRe2Kjoj-metaSWNvbmUtQkxDLnBuZw%3D%3D-.png。

[上一个异常] [对象](GuzzleHttp\Exception\ConnectException(代码:0):cURL错误7:0毫秒后无法连接到minio.cdm.local端口80:无法连接到服务器(请参阅https: //curl.haxx.se/libcurl/c/libcurl-errors.html)对于http://minio.cdm.local/public/livewire-tmp/3gV8mEXfLVdtzdvzKRuiGxHRe2Kjoj-metaSWNvbmUtQkxDLnBuZw%3D%3D-.png位于/应用程序/供应商/guzzlehttp/guzzle/src/Handler/CurlFactory.php:275)

这让我抓狂,因为我已经测试了所有配置。

这是我与 Traefik 的 docker-compose :

  traefik:
    image: "traefik:v3.0"
    container_name: "traefik"
    command:
      # - "--log.level=DEBUG"
      - "--api.insecure=true"
      - "--providers.docker=true"
      - "--providers.docker.exposedbydefault=false"
      - "--entryPoints.web.address=:80"
    ports:
      - "80:80"
      - "8080:8080"
    networks:
      - internal-network
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock:ro"

 cdm-app:
    depends_on:
      - traefik
      - mysql
      - minio
    build:
      context: ../../
      dockerfile: docker/local/images/cdm-app/Dockerfile
    volumes:
      - ../../src/cdm-app:/app
      - ./conf/php-fpm/docker.conf:/usr/local/etc/php-fpm.d/docker.conf
      -  ./conf/php-fpm/docker-fpm.ini:/usr/local/etc/php/conf.d/docker-fpm.ini
    networks:
      - internal-network

  nginx-cdm-app:
    image: nginx:latest
    volumes:
      - ./conf/nginx/nginx.conf:/etc/nginx/nginx.conf
      - ../../src/cdm-app:/app
    depends_on:
      - cdm-app
      - mysql
      - traefik
    networks:
      - internal-network
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.nginx-cdm-app.rule=Host(`cdm.local`)"
      - "traefik.http.routers.nginx-cdm-app.entrypoints=web" cdm-app:
    depends_on:
      - traefik
      - mysql
      - minio
    build:
      context: ../../
      dockerfile: docker/local/images/cdm-app/Dockerfile
    volumes:
      - ../../src/cdm-app:/app
      - ./conf/php-fpm/docker.conf:/usr/local/etc/php-fpm.d/docker.conf
      -  ./conf/php-fpm/docker-fpm.ini:/usr/local/etc/php/conf.d/docker-fpm.ini
    networks:
      - internal-network

  minio:
    image: 'minio/minio:RELEASE.2024-08-03T04-33-23Z'
    depends_on:
      - traefik
    ports:
      - '9000:9000'
      - '9001:9001'
    restart: always
    environment:
        MINIO_ROOT_USER: minio
        MINIO_ROOT_PASSWORD: "password"
        MINIO_HTTP_TRACE: /dev/stdout
    healthcheck:
      test: ["CMD", "mc", "ready", "local"]
      interval: 3s
      timeout: 10s
      retries: 10
    volumes:
      - '../../data/minio:/data/minio'
    command: 'minio server /data/minio --console-address ":9001"'
    networks:
      - internal-network
    labels:
      - "traefik.enable=true"
     # Console
      - "traefik.http.routers.minio-console.rule=Host(`console.cdm.local`)"
      - "traefik.http.routers.minio-console.entrypoints=web"
      - "traefik.http.routers.minio-console.service=minio-console"
      - "traefik.http.services.minio-console.loadbalancer.server.port=9001"
      # APi
      - "traefik.http.routers.minio.rule=Host(`minio.cdm.local`)"
      - "traefik.http.routers.minio.entrypoints=web"
      - "traefik.http.routers.minio.service=minio"
      - "traefik.http.services.minio.loadbalancer.server.port=9000"

我已经将 /etc/hosts 设置为 localhost 的 DNS

这里是我的 Laravel 配置 .env :

APP_URL=http://cdm.local

AWS_ACCESS_KEY_ID=xxxxxx
AWS_SECRET_ACCESS_KEY=xxxxxxxxxxx
AWS_DEFAULT_REGION=us-east-1
AWS_BUCKET=public
AWS_USE_PATH_STYLE_ENDPOINT=true
AWS_ENDPOINT=http://minio.cdm.local
AWS_URL=http://minio.cdm.local/public
MINIO_ENDPOINT=http://minio.cdm.local

我尝试了这个测试代码:

Route::get('/test', function () {
    $fileName = 'test_file.png';


$filePath = sys_get_temp_dir() . '/' . $fileName;
file_put_contents($filePath, 'Test file content');

if (file_exists($filePath)) {
    echo "Fichier temporaire créé avec succès.\n";
} else {
    echo "Erreur lors de la création du fichier temporaire.\n";
    return;
}

try {
    $result = Storage::disk('s3')->put('test/' . $fileName, file_get_contents($filePath));
    echo $result ? "Fichier téléchargé avec succès.\n" : "Échec du téléchargement du fichier.\n";
  
    $mimeType = Storage::disk('s3')->mimeType('test/' . $fileName);
    echo "Type MIME du fichier téléchargé: " . $mimeType . "\n";

    // Récupérez l'URL du fichier
    $url = Storage::disk('s3')->url('test/' . $fileName);
    echo "URL du fichier téléchargé: " . $url . "\n";
} catch (\Exception $e) {
    echo "Erreur lors du téléchargement ou de la récupération des informations du fichier: " . $e->getMessage() . "\n";
}

});


并收到此错误:

Fichier temporaire créé avec succès。

电话充电或文件信息恢复错误:无法在以下位置写入文件:test_file.png。在“http://minio.cdm.local/public/test_file.png”上执行“PutObject”时出错; AWS HTTP 错误:cURL 错误 7:0 毫秒后无法连接到 minio.cdm.local 端口 80:无法连接到服务器(请参阅 https://curl.haxx.se/libcurl/c/libcurl-errors)。 html)对于http://minio.cdm.local/public/test_file.png

这很奇怪,因为文件没有放入存储桶中。

我哪里遗漏了什么?

laravel traefik minio laravel-filament filamentphp
1个回答
0
投票

尝试将 .ENV minio 端点更改为您的 docker 容器:

AWS_ENDPOINT=http://minio:9000

© www.soinside.com 2019 - 2024. All rights reserved.