我正在使用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配置。
2条答案
按热度按时间sgtfey8w1#
确保您保存图片的方式正确,并聚焦到正确的区域。
确保您用来存储图片的信息库字段具有正确的信息类型(例如text或varchar),并且足够长以存储整个图片。
确认信息库具有与您尝试保存图片的位置保持联系的基本许可。
如果您使用的是Web应用程序,请确保图片方式经过适当编码,并且您使用的是正确的URL标点符号。
如果您正在使用MySQL这样的数据集管理框架(DBMS),则可能必须使用mysql_real_escape_string()这样的逃逸功能来准确地保存图片。
确保您的SQL问题中没有标点符号错误。
假设问题继续发生,请尝试通过打印出图片方式和用于将其保存到信息库的SQL问题来调查问题。这可以帮助您区分信息或查询中的任何问题。
im9ewurl2#
我已经很久没有在Windows环境中工作了,但在我看来,问题出在文件路径上。
第一个月
在Windows中,目录分隔符是一个反斜杠字符
\
,您要附加一个具有正斜杠/
作为目录分隔符的Route(就像 *nix系统所具有的)。此操作将导致错误的文件路径-一个包含反斜杠和正斜杠的文件路径。
尝试执行
str_replace('/', '\\', self::route())
。如果我是正确的,文件路径是这里的问题,请注意,这个错误很可能不会弹出在 *nix环境。
一个好的做法是首先检查给定的子目录是否存在,如果不存在,则创建它们,然后才保存文件。