我对 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
这很奇怪,因为文件没有放入存储桶中。
我哪里遗漏了什么?
尝试将 .ENV minio 端点更改为您的 docker 容器:
AWS_ENDPOINT=http://minio:9000