RuntimeException SplFileInfo :: getSize():laravel中的统计信息失败

时间:2018-11-02 07:23:25

标签: php html laravel postgresql

我是laravel的新手。我尝试上传图像,但是在getClientsize中出现错误。我尝试在Google中检查解决方案。我按照它编辑post_max_size和upload_max_size文件,但对我来说仍然不起作用。 任何人都可以帮助解决此问题。我在下面附上了代码。

控制器

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\file;
use Illuminate\Support\Facades\Input;
use Illuminate\Http\UploadedFile;

class testing extends Controller
{
    public function store(Request $request)
    {
        $user = new file;
        $user->title = Input::get('name');
        if(Input::hasFile('image')){
            $file=Input::file('image');
            $file->move(public_path().'/images/', $file);
            $user->name=$file->getClientoriginalName();
            $user->size=$file->getClientsize();
            $user->type=$file->getClientMimeType();
        }
        $user->save();
        return "data saved";
    }

4 个答案:

答案 0 :(得分:1)

请更改

getClientsize() -> getClientSize()

但是,如果没有帮助-您的问题不在您的php文件中,而是在php配置文件中。默认情况下,您可以上传2M(兆字节)的文件。

; Maximum allowed size for uploaded files.
; http://php.net/upload-max-filesize
upload_max_filesize = 2M

但是您可以在这里更改它:

在.htaccess中添加行:

  

php_value upload_max_filesize 50M

或Ubuntu:

  

/etc/php/7.1(您的版本)/apache2/php.ini(查找upload_max_filesize,   并覆盖它)

  

/etc/php/php.ini

编辑文件后-重新启动apache

答案 1 :(得分:0)

通过阅读laravel 6. *和php 7.3的文档,您可以看到可以使用store方法上传文件。 如果要在第一次运行php artisan vendor:publish并在config->filesystems.php中将文件存储在public或public_html中,请定义新磁盘,例如名称为public_local并将此磁盘的根目录设置为public地址:< / p>

'public_local' => [
            'driver' => 'local',
            'root' => public_path(),
        ],

然后,为了将文件存储在此磁盘中,可以使用为文件设置唯一名称的存储方法,或使用具有自定义名称的storeas: 使用存储方法:

$path = $request->file('image_url')->store($imagePath, 'public_local');
$path = $request->file('image_url')->storeAs($imagePath, 'custom_name', 'public_local');

答案 2 :(得分:0)

我花了将近8个小时才找出原因,发现:

如果您在控制器中上载文件(使用$ file-> move(public_path()。'/ images /',$ file);),并且如果您再次使用'在模型中使用HasMediaTrait的特征。

原因: 在已经使用语句'$ file-> move(public_path()。'/ images /',$ file);'上传的控制器文件中; 再次,如果您在模型中使用'use HasMediaTrait'特性,系统尝试再次上传文件,则会导致此错误。

解决方案: 如果您在控制器中上载,则无需使用模型“使用HasMediaTrait”特征,否则只需在控制器中删除文件上载逻辑,而在模型中使用特征(使用HasMediaTrait)。 >

我希望这能提供更多见识。

  • Adi

答案 3 :(得分:0)

可能的原因是因为文件已从tmp移至其分配的路径,所以不再存在。因此,从tmp文件读取文件大小是无效操作。

可能的解决方案:在移动文件之前读取文件大小。为我工作。

if ($req->hasFile('uploadedFile')) 
{
    $file = $req->file('uploadedFile');
    $filesize = $file->getSize();
    $filename = $file->getClientOriginalName();

    if ($file->move('upload/', $filename))
    {
        $insert = DB::table('table')->insert(["filename" =>$filename,
                                             "size"      =>$filesize]);
    }
}