gpt4 book ai didi

php - “Can' t将图像数据写入路径”-Laravel Image Intervention

转载 作者:行者123 更新时间:2023-12-02 19:51:56 27 4
gpt4 key购买 nike

无法将图像数据写入路径(Laravel)

我无法将任何内容保存到Laravel项目的存储目录中,并收到以下错误:

can't write image data to path

最近三周,我一直在努力找出为什么我无法在没有运气的情况下将图像保存到StorageLaravel文件夹中的原因。我对StackOverflow进行了搜索,得出的结论可能是由于我的Docker镜像所致。我希望尽可能使用我的自定义图片,但要使其正常工作。这是我的设置:

Dockerfile(基本镜像)

ARG VERSION=7.4
FROM php:${VERSION}-fpm-alpine

# PHP_CPPFLAGS are used by the docker-php-ext-* scripts
ENV PHP_CPPFLAGS="$PHP_CPPFLAGS"

# Install zip for csv stuff
# hadolint ignore=DL3018
RUN apk add --no-cache \
libzip-dev \
zip \
&& docker-php-ext-install zip \
&& apk del libzip-dev

# Install gd for image stuff
# hadolint ignore=DL3018
RUN apk add --no-cache libpng libpng-dev libjpeg-turbo-dev libwebp-dev zlib-dev libxpm-dev \
&& docker-php-ext-install gd \
&& apk del libpng-dev libjpeg-turbo-dev libwebp-dev zlib-dev libxpm-dev

# Install Nginx & PHP packages and extensions
# hadolint ignore=DL3018
RUN apk add --no-cache \
# for PHP/Laravel
git \
icu-dev \
msmtp \
nginx \
unzip \
# zip \
&& mkdir -p /run/nginx \
&& docker-php-ext-install \
pdo_mysql \
opcache \
&& { \
echo 'opcache.memory_consumption=128'; \
echo 'opcache.interned_strings_buffer=8'; \
echo 'opcache.max_accelerated_files=4000'; \
echo 'opcache.revalidate_freq=2'; \
echo 'opcache.fast_shutdown=1'; \
echo 'opcache.enable_cli=1'; \
} > /usr/local/etc/php/conf.d/php-opocache-cfg.ini \
&& apk del icu-dev

COPY /config/nginx.conf /etc/nginx/conf.d/default.conf
COPY /config/msmtprc /etc/msmtprc
COPY /scripts/start.sh /etc/start.sh
COPY --chown=www-data:www-data src/ /var/www/html

WORKDIR /var/www/html

EXPOSE 80 443

ENTRYPOINT ["/etc/start.sh"]

Dockerfile(项目,引用上面的Dockerfile ^)
FROM justintime50/nginx-php:dev # the dockerfile above

COPY --chown=www-data:www-data ./src /var/www/html
COPY nginx.conf /etc/nginx/conf.d/default.conf
RUN php composer.phar install -q --no-ansi --no-interaction --no-scripts --no-suggest --no-progress --prefer-dist \
&& chmod -R 775 storage \
&& php artisan storage:link \
&& chmod -R 775 bootstrap/cache

Docker撰写
version: "3.7"
services:

laraview:
build: .
restart: always
container_name: laraview
volumes:
- ./src/storage:/var/www/html/storage
networks:
- traefik
- laraview
labels:
- traefik.enable=true
- traefik.docker.network=traefik
- traefik.frontend.rule=Host:laraview.localhost
- traefik.port=80
env_file:
- init-db.env
depends_on:
- laraview-db

laraview-db:
image: mysql:8.0.18
restart: always
container_name: laraview-db
env_file:
- init-db.env
volumes:
- ./db:/var/lib/mysql
networks:
- laraview
ports:
- "3306:3306"
labels:
- traefik.enable=false

networks:
traefik:
external:
name: traefik
laraview:
name: laraview

上传图像文件(Laravel)

    public function updateProfilePic(Request $request)
{
$request->validate([
'upload_profile_pic' => 'required|image|mimes:jpeg,jpg,png|max:2048',
]);
$id = request()->get('id');

$file = $request->file('upload_profile_pic');
$img = Image::make($file)
->resize(320, 240)
->save(storage_path(), $file->getClientOriginalName());

// Upload Profil Pic (IMAGE INTERVENTION - LARAVEL)
//Image::make($request->file('upload_profile_pic'))->fit(150, 150)->save(storage_path('avatars/'.$id.'.png'));

session()->flash("message", "Profile picture updated successfully.");
return redirect()->back();
}

引用文献:
  • Nginx / PHP图像:https://github.com/Justintime50/nginx-php-docker/tree/develop
  • Laravel项目:https://github.com/Justintime50/laraview/tree/develop
  • 最佳答案

    @leo我很抱歉,我从未回来回答这个问题。我不记得确切的解决方法,但是我相信我在滥用storage_path。这是更正的PHP代码:

        public function uploadPostImage(Request $request)
    {
    $request->validate([
    'upload_image' => 'required|image|mimes:jpeg,jpg,png|max:2048',
    ]);
    $id = mt_rand(100000000000, 999999999999); # TODO: This is hacky, fix down the road

    if (!is_dir(storage_path("app/public/post-images"))) {
    mkdir(storage_path("app/public/post-images"), 0775, true);
    }

    // Upload Avatar (IMAGE INTERVENTION - LARAVEL)
    Image::make($request->file("upload_image"))->save(storage_path("app/public/post-images/".$id.".png"));

    session()->flash("message", "Image uploaded successfully.");
    return redirect()->back();
    }
    我使用了相同的Docker镜像和docker-compose文件,这意味着它必须通过正确使用 storage_path进行修复。

    关于php - “Can' t将图像数据写入路径”-Laravel Image Intervention,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60104989/

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