我今天遇到了一个问题,我似乎无法找到解决方案。
我正在为图片上传创建一个类。上传本身工作正常,但当我尝试使用上传的文件创建缩略图时,由于某种原因无法找到该文件。
我的代码:
private static $imageTypes = [
"image/jpeg", "image/png", "image/gif", "image/x-ms-bmp"
];
public function upload(UploadedFile $file, $folder = 'common')
{
if (!$this->isImage($file)) {
return false;
}
$path = $this->createPath($file, $folder);
try {
$file->move($path, $file->getClientOriginalName());
$filePath = sprintf("%s/%s", $path, $file->getClientOriginalName());
} catch (FileException $e) {
return false;
}
$realPath = 'public/' . $filePath;
//dd(File::exists($realPath)); - this returns false
//dd(File::get($realPath)); - this throws the exception
$image = Image::make(File::get($realPath));
// Code for creating a thumbnail - not implemented yet.
$thumbnailPath = '';
return [
'image' => $path,
'thumbnail' => $thumbnailPath
];
}
private function isImage(UploadedFile $file)
{
$type = $file->getClientMimeType();
return in_array($type, self::$imageTypes);
}
private function createPath(UploadedFile $file, $folder)
{
$time = Carbon::now();
$path = sprintf(
'Code/images/uploads/%s/%d-%d',
$folder,
$time->year,
$time->month
);
return $path;
}
我知道该文件已上传,但我不知道为何无法找到该文件。我已使用php artisan tinker
尝试了相同的操作,但它在那里工作,因此问题不在文件路径中。
我到目前为止唯一的想法是与目录权限相关,但我还没有能够验证它。
答案 0 :(得分:4)
我相信你的问题在这里:$realPath = 'public/' . $filePath;
。您需要上传文件夹的完整路径,因此请尝试将其替换为public_path()."/".$filePath
。
答案 1 :(得分:1)
我最近陷入同样的情况,所以这里有个提示
版本5之后的Laravel似乎仅允许使用在filesystems.php中定义的声明存储来处理文件(获取/放置)
在这种情况下,用户必须使用“本地”或“公共”存储来获取存储的图像或文件。 根据上面的代码,请执行以下操作
'local' => [
'driver' => 'local',
'root' => storage_path('app/local/common'),
],
$afile = storage::disk('public')->get('image1.jpg');
在您的情况下:
$realpath = 'image1.jpg'; //**Just the filename**
$image = Image::make(storage::disk('local')->get($realPath));
希望这会有所帮助
答案 2 :(得分:-4)