Laravel 9:无法将图像数据写入路径

g6baxovj  于 2023-01-10  发布在  其他
关注(0)|答案(2)|浏览(199)
    • bounty将在7天后过期**。回答此问题的人有资格获得+50的声望奖励。Pouya希望吸引更多人关注此问题。

我正在使用Laravel 9制作一个论坛项目。
现在这个项目,我需要上传一些图像。
因此,在控制器中,我添加了以下内容:

if($request->has('filep')){
    $files = $request->file('filep');
    foreach ($files as $file) {
          $this->uploadImage($file, $questionCreated->id, 'question_image');
    }
}

下面是**uploadImage**方法:

public function uploadImage($request, $id, $type_image)
    {
        $imagesUrl = UploadFile::upload($request,"Question",$id);
        foreach ($imagesUrl['path'] as $path) {
            UploadedFile::create([
                'upf_object_id' => $id,
                'upf_object_type_id' => $this->objectTable('questions'),
                'upf_path' => $path['upf_path'],
                'upf_uploaded_as' => $type_image,
                'upf_dimension' => $path['upf_dimension'],
                'upf_type' => $imagesUrl['option']['upf_type'],
                'upf_category' => $imagesUrl['option']['upf_category'],
                'upf_mime_type' => $imagesUrl['option']['upf_mime_type'],
            ]);
        }
    }

正如你所看到的,我正在调用一个名为**UploadFile的helper类(see_it_here)和它的upload**方法:

public static function upload($file,$cat,$queid)
    {
        self::directoryType($file->getClientOriginalExtension());
        self::$mimeType = $file->getMimeType();
        self::$catType = $cat;
        self::$objId = $queid;
        $fileName = self::checkExistFile($file->getClientOriginalName());

        if (in_array($file->getClientOriginalExtension(), self::resizeable())) {
            $file->storeAs(self::route(), $fileName);
            self::resize($file, $fileName);
        }
        $file->storeAs(self::route(), $fileName);
        $file_name_hash = md5($fileName);
        return [
            "path" =>
                array_merge(self::$urlResizeImage, [[
                    "upf_path" => self::route() . $fileName,
                    "upf_dimension" => "fullsize"
                ]]),
            "option" => [
                "upf_object_id" => "",
                "upf_object_type_id" => "",
                "upf_type" => self::$typeFile,
                "upf_category" => self::$catType,
                "upf_mime_type" => self::$mimeType,
                'upf_file_name' => $fileName,
                'upf_file_hash' => $file_name_hash,
            ]
        ];
    }

现在问题来自使用图像干预调整大小的**resize**方法:

public static function resize($file, $fileName)
    {
        $path = self::route();
        foreach (self::size() as $key => $value) {
            $resizePath = self::route() . "{$value[0]}x{$value[1]}_" . $fileName;
            Image::make($file->getRealPath())
                ->resize($value[0], $value[1], function ($constraint) {
                    $constraint->aspectRatio();
                })
                ->save(storage_path($path));
            $urlResizeImage[] = ["upf_path" => $resizePath, "upf_dimension" => "{$value[0]}x{$value[1]}"];
        }
        self::$urlResizeImage = $urlResizeImage;
    }

行**->save(storage_path($path));**返回以下错误:

无法将图像数据写入路径(C:\xampp\htdocs\forum\storage\upload/1401/10/images/questions/77)

我不知道这到底是怎么回事。
如果你知道,请告诉我...
我真的很感激你们的任何想法或建议。
这也是我的filesystems配置。

sgtfey8w

sgtfey8w1#

确保您保存图片的方式正确,并聚焦到正确的区域。
确保您用来存储图片的信息库字段具有正确的信息类型(例如text或varchar),并且足够长以存储整个图片。
确认信息库具有与您尝试保存图片的位置保持联系的基本许可。
如果您使用的是Web应用程序,请确保图片方式经过适当编码,并且您使用的是正确的URL标点符号。
如果您正在使用MySQL这样的数据集管理框架(DBMS),则可能必须使用mysql_real_escape_string()这样的逃逸功能来准确地保存图片。
确保您的SQL问题中没有标点符号错误。
假设问题继续发生,请尝试通过打印出图片方式和用于将其保存到信息库的SQL问题来调查问题。这可以帮助您区分信息或查询中的任何问题。

im9ewurl

im9ewurl2#

我已经很久没有在Windows环境中工作了,但在我看来,问题出在文件路径上。
第一个月
在Windows中,目录分隔符是一个反斜杠字符\,您要附加一个具有正斜杠/作为目录分隔符的Route(就像 *nix系统所具有的)。
此操作将导致错误的文件路径-一个包含反斜杠和正斜杠的文件路径。
尝试执行str_replace('/', '\\', self::route())
如果我是正确的,文件路径是这里的问题,请注意,这个错误很可能不会弹出在 *nix环境。
一个好的做法是首先检查给定的子目录是否存在,如果不存在,则创建它们,然后才保存文件。

相关问题