从mimetype生成图像扩展

时间:2015-05-13 04:18:25

标签: security laravel-5 mime-types image-uploading dummy-data

我一直在Laravel 5中尝试图片上传(通过laravelcollective / forms生成上传,并使用Intervention Image library进行处理)。 我想做的是当用户上传任何照片时,我想根据其mimetype设置扩展名。应该进行一些基本检查以防止虚假数据注入。

$file_profile_image->getClientMimeType();

要做到这一点,我应该像这样

进行映射
['image/jpeg' => 'jpg', 'image/gif'=> 'gif']

3 个答案:

答案 0 :(得分:1)

我会使用Intervention软件包来检查你是否正在加载一个有效的图像并从那里获取mime。

这样的事情:

/**
 * Store a file
 *
 * @return Response
 */
public function store(Filesystem $filesystem)
{
    // check if file was posted

    $uploadedFile = Request::file('file');

    // other checks here, ->isValid() && filesize

    try {
        $image = Image::make(\File::get($uploadedFile));
    } catch (\Intervention\Image\Exception\NotReadableException $e) {
        \Log::error('Unsupported filetype');
        dd('Unsupported filetype');
        // return proper error here
    }

    // mime as returned by Intervention
    $mime = $image->mime();

    // other stuff
    // store @ fs
}

答案 1 :(得分:0)

我就是这样做的:

$source_file = $request->file('image')->getRealPath();
$info = get_image_details($source_file);

get_image_details($path)函数可以定义如下:

function get_image_details($path)
{
    $details = @getimagesize( $path );

    if ( is_array($details) && count($details) > 2 ) {

        $info = [
            'width' => $details[0],
            'height' => $details[1],
            'mime' => $details['mime'],
            'size' => @filesize($path),
            'path' => $path,
        ];

        switch ($details['2']) {
            case IMG_PNG:
            case 3:
                $info['type'] = 'png';
            break;

            case IMG_JPG:
            case 2:
                $info['type'] = 'jpg';
            break;

            case IMG_GIF:
            case 1:
                $info['type'] = 'gif';
            break;

            default:
                $info['type'] = $details[2];
            break;
        }

        return $info;
    }
    return false;
}

答案 2 :(得分:0)

文件对象具有仅用于这种情况的方法。您所需要做的就是像这样在文件对象上调用guessExtension方法

$file_profile_image->guessExtension()