Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在Laravel中调整上载图像的大小并将其存储在S3中不起作用_Php_Laravel_Amazon S3_Laravel 5 - Fatal编程技术网

Php 在Laravel中调整上载图像的大小并将其存储在S3中不起作用

Php 在Laravel中调整上载图像的大小并将其存储在S3中不起作用,php,laravel,amazon-s3,laravel-5,Php,Laravel,Amazon S3,Laravel 5,我正试图上传几个大小调整过的图片到S3,但不知怎么的,所有的图片都有相同的大小。在本地以不同的大小存储它们不会带来任何问题。我错过了什么 public function uploadFileToS3(Request $request) { $image = Image::make($request->file('image'))->encode('jpg', 75); $s3 = Storage::disk('s3'); $image_file_name =

我正试图上传几个大小调整过的图片到S3,但不知怎么的,所有的图片都有相同的大小。在本地以不同的大小存储它们不会带来任何问题。我错过了什么

public function uploadFileToS3(Request $request) {
    $image = Image::make($request->file('image'))->encode('jpg', 75);
    $s3 = Storage::disk('s3');

    $image_file_name = $this->generateName($request->name) . '.jpg';
    $file_path = '/' . config('folder') . '/' . $request->name . '/';

    $s3->put($file_path.'original_'.$image_file_name, $image, 'public');
    $s3->put($file_path.'medium_'.$image_file_name, $image->fit(300, 300), 'public');
    $s3->put($file_path.'thumb_'.$image_file_name, $image->fit(100, 100), 'public');

    return json_encode(array(
        'filename' => $image_file_name
    ));
}

所有版本都成功存储在S3中,只有大小相同的版本才有两种可能的解决方案

在尝试存储图像之前,请尝试完全执行图像处理:

$s3->put($file_path.'original_'.$image_file_name, $image, 'public');
$image->fit(300, 300);
$s3->put($file_path.'medium_'.$image_file_name, $image, 'public');
$image->fit(100, 100);
$s3->put($file_path.'thumb_'.$image_file_name, $image, 'public');

尝试将图像转换为字符串,实际输出文件内容应该可以正常工作:

$s3->put($file_path.'original_'.$image_file_name, (string) $image, 'public');

。。。我设法解决了这个问题,首先将调整大小的图像存储到本地tmp文件夹,然后上传。这是一个我真的不太喜欢的工作环境,因为在我看来,对于一些应该在Laravel中处理的事情,它的编码太多了

    $folder = $_SERVER['DOCUMENT_ROOT'] . '/tmp/';
    $image_file_name = $this->generateName($request->name) . '.jpg';

    // save original
    $image->save($folder . 'original_' . $image_file_name);
    $s3->put($file_path.'original_'.$image_file_name, fopen($folder.'original_'.$image_file_name, 'r+'), 'public');

    // generate thumb
    $image = $image->fit(100, 100);
    $image->save($folder . 'thumb_' . $image_file_name);
    $s3->put($file_path.'thumb_'.$image_file_name, fopen($folder.'thumb_'.$image_file_name, 'r+'), 'public');